我有一个泛型类的类,泛型类型有一个子类类型约束。然后我尝试将类的实例传递给方法,但最终得到以下编译时错误:
Cannot convert value of type 'B<SomeType>' to expected argument type 'B<NSObject>'
下面是一个简单的例子:
class A: NSObject {
func testB(b: B<NSObject>) {
}
}
class B<SomeType: NSObject>: NSObject {
func test() {
let a = A()
a.testB(b: self) // <----- The error noted above is shown here
}
}
因为SomeType
保证是NSObject
的子类,所以我希望编译器可以将B<SomeType>
转换为B<NSObject>
并传递它。< / p>
A类只关心B&#39; SomeType
是NSObject
的子类,而不是SomeType
的实际类型。如果某个函数采用UIView
参数并传入UILabel
就好了。
答案 0 :(得分:1)
变化:
func testB(b: B<NSObject>) {
}
要:
func testB<SomeType: NSObject>(b: B<SomeType>) {
}
这样可行,因为SomeType
约束NSObject
,不等于NSObject
。
因此,您的函数SomeType
也应该约束到NSObject
:
func testB<SomeType: NSObject>(b: B<SomeType>) { ... }