这是我的代码:
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
方法一起使用?
答案 0 :(得分:1)
在wrap
func wrap<P: NSObject>(with: P) -> GenericClass<P> {
return GenericClass<P>(generic: with, somethingElse: somethingElse)
}