Shu*_*ham 6 generics protocols class swift anyobject
我有一个通用结构声明如下:
struct WeakReference<T: AnyObject> {
    weak var value: T?
    init(value: T?) {
        self.value = value
    }
}
和一个协议:
protocol SomeProtocol: class {
}
但我无法声明 类型的变量WeakReference<SomeProtocol>,编译器抱怨说
“WeakReference”要求是
SomeProtocol类类型
有趣的是,在 Swift 中,class是 AnyObject 的类型别名。
我实际上想保存一个数组,WeakReference<SomeProtocol>因为该数组保存强引用。
Swift 中的仅类泛型约束是一个类似的问题,但并没有真正解决这个问题。
我们如何传递SomeProtocolto WeakReference?
编辑: 以下场景编译良好,但我们失去了保存弱引用的能力:
struct Reference<T> {
    var value: T?
    init(value: T?) {
        self.value = value
    }
}
var array: [Reference<SomeProtocol>] = []
很简单。你正在传递的SomeProtocol是一个protocol. 您需要传递特定的类类型。
示例:
class SomeImplementation: SomeProtocol {
}
var weakSome: WeakReference<SomeImplementation> = ...
或者您可以通过用注释标记协议来绕过它@objc,但我不喜欢这种方法。
@objc protocol SomeProtocol: class {
}
var weakSome: WeakReference<SomeProtocol> = ...
尝试检查这个答案,它可能会为您提供有关该问题的更多背景信息。