Swift 将符合AnyObject协议的对象传递到需要AnyObject的泛型
假设此代码:Swift 将符合AnyObject协议的对象传递到需要AnyObject的泛型,swift,generics,Swift,Generics,假设此代码: protocol Test: AnyObject {} class RealTest: Test {} class Wrapper<A: AnyObject> { weak var value: A? init(_ value: A) { self.value = value } } let realTest = RealTest() let wrapper = Wrapper(realTest) 我收到了错误信息 泛型
protocol Test: AnyObject {}
class RealTest: Test {}
class Wrapper<A: AnyObject> {
weak var value: A?
init(_ value: A) {
self.value = value
}
}
let realTest = RealTest()
let wrapper = Wrapper(realTest)
我收到了错误信息
泛型类“包装器”要求“测试”是类类型
是否有解决方案,因为我需要AnyObject要求,并且我只知道对象符合的协议?协议不符合自身(或任何协议)。只有具体类型才能符合协议 如果您只需要知道这个类型是一个类(AnyObject),那么在这里您不需要泛型,您只需要传递协议类型本身(技术上是“存在的”)
如果您出于其他原因需要此处的泛型,那么泛型必须位于具体类型之上,而不是协议之上。嘿,谢谢您的评论。我已经过度简化了我的代码,sry就是这样。包装器包含对该值的弱引用,因此最好有一个泛型,这样在访问该值时就不需要强制转换。我已经更新了代码示例来反映这一点。这很好,但是类型必须是具体的,而不是协议。您不能有
包装器
。Swift没有任何方法来构建它。好吧,我无法使协议具体化,因为我将失去拥有协议的所有好处。好的,谢谢,我需要想出另一个解决方案:)
let realTest: Test = RealTest()
class Wrapper {
let value: AnyObject
init(_ value: AnyObject) {
self.value = value
}
}