斯威夫特 - 捕捉倒闭 - 苹果公司的迅速编程指南片段

问题描述:

在苹果的斯威夫特编程指南,“自动引用计数”部分,在“解决了瓶盖强参照周期”, 这个片断中提到:斯威夫特 - 捕捉倒闭 - 苹果公司的迅速编程指南片段

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

什么是赋值“weak delegate = self.delegate!”中感叹号的点?

我的意思是,你为什么在意有没有价值?无论哪种方式,您都将在封闭体内部接收可选委托,因为委托被声明为弱选项,必须是可选的,并且您必须以可选方式访问它。另一方面,如果你知道'self.delegate'不会在你访问它时为零,为什么不把它声明为unowned?

因此,为什么这里的武力必须展开? 有人可以对此有所了解吗?

由于在这个例子中没有任何关于文本的更多上下文,唯一能够确切知道的人是Swift编程指南的作者或维护者。

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

  • 笔者犯了一个错误(它发生)
  • 它需要在旧版本的雨燕和的文档尚未更新(保持最新的文档很难)
  • 作者想让其他人明白,如果代理不存在是创建块是一个错误
  • 作者想让它更容易跟踪代表是否为dealloca的情况(可能出于分析目的?)
+0

第一个和第二个选项可能真的是这样。 至于第三种选择 - 为什么使用'弱'呢?似乎在这种情况下,“无主”更合适,不是吗? 第四种选择 - 也可能是答案,但似乎不太可能,因为他们正在使用它们的编程指南。我不认为他们试图迷惑读者。 – NameNotFoundException