斯威夫特 - 捕捉倒闭 - 苹果公司的迅速编程指南片段
问题描述:
在苹果的斯威夫特编程指南,“自动引用计数”部分,在“解决了瓶盖强参照周期”, 这个片断中提到:斯威夫特 - 捕捉倒闭 - 苹果公司的迅速编程指南片段
lazy var someClosure:() -> String = {
[unowned self, weak delegate = self.delegate!] in
// closure body goes here
}
什么是赋值“weak delegate = self.delegate!”中感叹号的点?
我的意思是,你为什么在意有没有价值?无论哪种方式,您都将在封闭体内部接收可选委托,因为委托被声明为弱选项,必须是可选的,并且您必须以可选方式访问它。另一方面,如果你知道'self.delegate'不会在你访问它时为零,为什么不把它声明为unowned?
因此,为什么这里的武力必须展开? 有人可以对此有所了解吗?
答
由于在这个例子中没有任何关于文本的更多上下文,唯一能够确切知道的人是Swift编程指南的作者或维护者。
但这里是我能想到的一些可能的原因(排名不分先后)
- 笔者犯了一个错误(它发生)
- 它需要在旧版本的雨燕和的文档尚未更新(保持最新的文档很难)
- 作者想让其他人明白,如果代理不存在是创建块是一个错误
- 作者想让它更容易跟踪代表是否为dealloca的情况(可能出于分析目的?)
第一个和第二个选项可能真的是这样。 至于第三种选择 - 为什么使用'弱'呢?似乎在这种情况下,“无主”更合适,不是吗? 第四种选择 - 也可能是答案,但似乎不太可能,因为他们正在使用它们的编程指南。我不认为他们试图迷惑读者。 – NameNotFoundException