我认为结构不是 AnyObject。例如:https ://stackoverflow.com/a/33921992/2054629
但后来我尝试了(在 swift 3,xcode 8.2.1 中):
struct Struct{
let foo = 1
}
let s = Struct()
s is AnyObject // true, and I get a warning saying "'is' test is always true"
事实上我可以做到:
let o = s as AnyObject
(o as! Struct).foo // this is 1
那么struct是AnyObject吗?也许不吧:
class Weak<T: AnyObject> {
public weak var value : T?
public init (value: T) {
self.value = value
}
}
let weak = Weak<Struct>(value: s) // Error: "Type 'Struct' does not conform to protocol 'AnyObject'"
现在,如果我将最后一行替换为:
let weak = Weak<AnyObject>(value: s as AnyObject)
编译好。的确,我们有s is AnyObject
这是真的。但是之后
weak.value // is nil
到底是怎么回事?
如果您需要玩,这是整个代码:
struct Struct {}
let s = Struct()
s is AnyObject
let o = s as AnyObject
(o as! Struct).foo
class Weak<T: AnyObject> {
public weak var value : T?
public init (value: T) {
self.value = value
}
}
// let weak = Weak<Struct>(value: s)
let weak = Weak<AnyObject>(value: s as AnyObject)
weak.value