bru*_*uno 1 xcode closures self ios swift
我在代码审查中被要求进行此更新。
从:
func bind(errorText: Driver<String>) {
errorText.drive(onNext: { [weak self] text in
self?.set(text: text)
self?.accessibilityValue = text
}).disposed(by: disposeBag)
}
Run Code Online (Sandbox Code Playgroud)
到:
func bind(errorText: Driver<String>) {
errorText.drive(onNext: { [weak self] text in
guard let self = self else { return }
self.set(text: text)
self.accessibilityValue = text
}).disposed(by: disposeBag)
}
Run Code Online (Sandbox Code Playgroud)
区别在于self?和 之间guard。
在第一个代码中,我的印象是self?当它调用的变量为零时被释放。或者是第二种方式,使用guard let self100% 确保self发布的方式?谢谢
这些实际上是相同的。主要区别在于第一个将检查是否self为 nil 两次而不是一次。由于第一个示例不具有跨语句的强引用,因此从技术上讲,第一行执行然后self被释放,而第二行不执行在技术上是可能的。在第二种情况下,guard let需要强引用直到块结束,此时self将被释放。
后者通常更可取,尽管无论如何这都不是一个大问题。当 nil 时,更容易推理guard let代码self。当您使用 跳过一堆语句时,任何不依赖self?.的行仍然会执行,这可能会令人惊讶。在不适合可选链接的情况下(例如访问 的属性时),它也很好。所以在更多情况下它的工作方式是相同的。selfself
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |