Swift闭包中的`self`

时间:2018-05-01 15:42:49

标签: swift closures

我想在Swift闭包中理解(( ... ))。 对于前 -

self

为什么我们在这里使用反击? 这是很好的编程习惯吗? 在这里如何弱势地捕捉自我?

2 个答案:

答案 0 :(得分:5)

Swift 4.2最近通过了一项提案,将其添加到语言中:

guard let self = self else { return }

建议的解决方案需要允许使用可选绑定将自我从弱引用升级为强引用。

有关更多详细信息,请参见快速发展建议SE-0079

答案 1 :(得分:4)

self是Swift中的保留字。由于您正在创建一个名为self的新本地变量,因此您需要使用反向标记对其进行标记,如rmaddy中的链接所述。

请注意,将弱self映射到强var的通常惯例是使用名称strongSelf

() -> Void = { [weak self] in
    guard let strongSelf = self else { 
        //your code to call self.callMethod2() can't succeed inside the guard (since in that case weak self is nil)
        //self.callMethod2()
        return   //You must have a statement like return, break, fatalEror, or continue that breaks the flow of control if the guard statement fails
    }
    strongSelf.callMethod3()
}