1

我认为结构不是 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
4

0 回答 0