gpt4 book ai didi

ios - 将具有泛型子类类型约束的对象传递给方法时出现 Swift 编译时错误

转载 作者:行者123 更新时间:2023-11-28 15:57:47 25 4
gpt4 key购买 nike

我有一个具有泛型类型的类,并且该泛型类型具有子类类型约束。然后我尝试将类的一个实例传递给一个方法,但最终出现以下编译时错误:

 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>并传递下去。

A 类只关心 B 的 SomeTypeNSObject 的子类而不是关于 SomeType 的实际类型.这就像一个函数接受 UIView。参数,你传入一个 UILabel .

最佳答案

改变:

func testB(b: B<NSObject>) {

}

收件人:

func testB<SomeType: NSObject>(b: B<SomeType>) {

}

这会起作用,因为 SomeType被限制为 NSObject , 不等于 NSObject .

所以你的函数的 SomeType应限制为 NSObject也是:

func testB<SomeType: NSObject>(b: B<SomeType>) { ... }

关于ios - 将具有泛型子类类型约束的对象传递给方法时出现 Swift 编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com