swift - 我们是否需要在每个嵌套闭包中重复 `guard let self = self else { return }` 以保持强大的自我?
问题描述
我需要在内心深处保持坚强的自我。我知道[weak self]
只声明一次外部关闭就足够了。
但是guard let self = self else { return }
,为外部关闭也声明一次就足够了吗?我们这里有任何边缘情况吗?
apiManager.doSomething(user: user) { [weak self] result in
guard let self = self else { return }
self.storageManager.doSomething(user: user) { result in
// guard let self = self else { return } <- DO WE NEED IT HERE ?
self.doSomething()
}
}
似乎语言分析器说 NO - 一个声明就足够了,但要确定。
解决方案
是的,一个就够了。如果你写
guard let self = self else { return }
您将创建一个新的局部变量,该变量将持有对外部弱自我的强引用。
这和写作一样
guard let strongSelf = self else { return }
然后strongSelf
用于块的其余部分。
推荐阅读
- r - 这是 R 3.5 中的错误吗?
- javascript - 更优雅的创建对象的方式
- java - 如何覆盖 jar 中捆绑的 database.properties
- algorithm - 用一条线将一组圆分成两等分
- multithreading - Sys.set_signal 在主线程上中断 input_line,但在子线程中不中断
- java - ActiveMQMessageConsumer 仅在 5 秒内从 Java 上的 Topic 接收消息
- angular - 如何在数组中分配随机颜色?
- git - 澄清 gitignore 文档
- r - dplyr::lag() 可以在不存在滞后值时保持值不变
- c# - Atata - 如何访问隐藏菜单