我有一个通用结构声明如下:
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 中的纯类泛型约束是一个类似的问题,但并没有真正解决这个问题。
我们如何传递SomeProtocol
to WeakReference
?
编辑: 以下场景编译得很好,但我们失去了保持弱引用的能力:
struct Reference<T> {
var value: T?
init(value: T?) {
self.value = value
}
}
var array: [Reference<SomeProtocol>] = []