重新包装通用类

时间:2019-05-04 18:37:13

标签: swift

这是我的代码:

import UIKit

class GenericClass<T: NSObject> {

    let generic: T
    let somethingElse: String

    init(generic: T, somethingElse: String) {
        self.generic = generic
        self.somethingElse = somethingElse
    }

    func wrap<P: NSObject>(with: P) -> GenericClass<P> {
        return GenericClass(generic: with, somethingElse: somethingElse)
    }
}

class Person {
    func transform() {
        let classA: GenericClass<UIViewController> = GenericClass(generic: UIViewController(nibName: nil, bundle: nil), somethingElse: "")
        let rewrapped: GenericClass<UIView> = classA.wrap(with: UIView())
    }
}

我收到此编译器错误:

  

无法推断出通用参数'P'

编译器无法推断类型,但是我不明白为什么在方法中必须这样做。它应该只返回具有指定类型的GenericClass。

我想用另一种类型替换generic并保持somethingElse不变。为什么它不能与wrap方法一起使用?

1 个答案:

答案 0 :(得分:1)

wrap

中指定通用类型
func wrap<P: NSObject>(with: P) -> GenericClass<P> {
    return GenericClass<P>(generic: with, somethingElse: somethingElse)
}