1

在 Apple 的 Swift 编程指南的“自动引用计数”部分中,在“解决闭包的强引用循环”中,提到了这个片段:

lazy var someClosure: () -> String = {
    [unowned self, weak delegate = self.delegate!] in
    // closure body goes here
}

作业“weak delegate = self.delegate!”中的感叹号有什么意义?

我的意思是,你为什么关心是否有价值?无论哪种方式,您都将在闭包体内收到一个可选委托,因为委托被声明为弱,它必须是可选的,并且您必须将其作为可选项访问。

另一方面,如果您确定“self.delegate”在您访问它时不会为 nil,为什么不将其声明为无主呢?

因此,为什么这里需要强制展开?有人可以对此有所了解吗?

4

1 回答 1

0

由于这个例子的文本中没有更多的上下文,唯一可以确定的是 Swift 编程指南的作者或维护者。

但这里有一些我能想到的可能原因(排名不分先后)

  • 作者犯了一个错误(它发生了)
  • 它是旧版本的 Swift 所必需的,并且文档尚未更新(很难使文档保持最新)
  • 作者想让其他人明白,如果委托不存在则创建块是一个错误
  • 作者希望更容易跟踪在创建块和调用它之间释放委托的情况(可能是出于分析目的?)
于 2017-09-03T13:39:47.250 回答