首页 > 解决方案 > 我们是否需要在每个嵌套闭包中重复 `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 - 一个声明就足够了,但要确定。

标签: swift

解决方案


是的,一个就够了。如果你写

guard let self = self else { return }

您将创建一个的局部变量,该变量将持有对外部弱自我的强引用。

这和写作一样

guard let strongSelf = self else { return }

然后strongSelf用于块的其余部分。


推荐阅读