我正在将 Swift 用于 macOS 应用程序,Xcode 是 12.5.1。想象一下我有以下代码:
func performAsyncTask(completion: { [weak self] (error: Error?) in
self?.someProperty = 0.0
self?.someOtherProperty = 0.0
// Other similar statements follow
})
将其更改为:是一个不错的选择吗?
func performAsyncTask(completion: { [weak self] (error: Error?) in
guard let self = self else { return }
self.someProperty = 0.0
self.someOtherProperty = 0.0
// Other similar statements follow
})
我相信第一个实现更好,因为 self 可能为零between语句,因此一开始展开可能不太干净。我希望专家能给我指明正确的方向。感谢您的关注。
我相信第一个实现更好,因为 self 可能在语句之间变为零
这就是为什么second实施实际上更好!如果self
第一个语句不为零,第一个语句使得它成为这样self
couldn't become nil
语句之间。它保留了self
正好用于该块的其余部分。这就是所谓的“弱强之舞”。
guard let self = self else { return }
// ^^^^ this self is _strong_, not weak; it retains self
Edit:请注意,在现代 Swift 中,这样说就足够了
guard let self else { return }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)