我需要在内心深处保持坚强的自我。我知道[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()
}
}
Run Code Online (Sandbox Code Playgroud)
似乎语言分析器说“没有一个声明就足够了”,但想确定一下。
Sch*_*tFx 17
当该方法同步工作时,您不需要在 中添加新的保护doSomething(user:)。使用 Swift 5.7,您可以使用重写语法guard let self else
apiManager.doSomething(user: user) { [weak self] result in
guard let self else { return }
self.storageManager.doSomething(user: user) { result in
// You don't a new guard here, when doSomething works synchronously
self.doSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当你guard唯一返回时,你也可以这样写:相同的行为。
apiManager.doSomething(user: user) { [weak self] _ in
self?.storageManager.doSomething(user: user) { _ in
self?.doSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*jen 14
是的,一个就够了。如果你写
guard let self = self else { return }
Run Code Online (Sandbox Code Playgroud)
您将创建一个新的局部变量,它将保留对外部弱自身的强引用。
和写作是一样的
guard let strongSelf = self else { return }
Run Code Online (Sandbox Code Playgroud)
然后用于strongSelf该块的其余部分。
| 归档时间: |
|
| 查看次数: |
14540 次 |
| 最近记录: |