【发布时间】:2016-08-31 05:55:42
【问题描述】:
我想在通用数据结构中使用弱引用;在里面 Array 下面的示例,但通常是任何泛型类型。我几乎可以得到它 上班:(
我的实验开始得很顺利;以下作品:
// Array of weak references OK
struct WeakReference<T: AnyObject> {
weak var value: T?
}
class C {
var i: Int = 0
}
let c = C() // Strong reference to prevent collection
let weakCs = [WeakReference(value: c)] // OK
print("C: \(weakCs[0].value!.i)") // 0
我可以添加一个协议:
// Array of weak references that implements a protocol OK
protocol P: AnyObject { // Note AnyObject
var i: Int { get }
}
class CP: P {
var i: Int = 0
}
let cP = CP() // Strong reference to prevent collection
let weakCPs = [WeakReference(value: cP)] // OK
print("CP: \(weakCPs[0].value!.i)") // 0
但是当我想要一个对协议的弱引用数组时,我得到一个错误:
// Array of weak references of a protocol not OK
let weakPs: [WeakReference<P>] = [WeakReference(value: cP)] // Using 'P' as
a concrete type conforming to protocol 'AnyObject' is not supported
print("P: \(weakPs[0].value!.i)") // 0
我错过了什么吗?
错误消息,“使用'P'作为符合协议的具体类型 'AnyObject' is not supported",暗示它是一个临时限制 编译器。这会被修复吗?我应该提交错误报告吗?
提前感谢您的任何建议,
-- 霍华德。
【问题讨论】:
标签: swift generics weak-references swift-protocols