Swift 4.2 可使用 self 作为变量名啦!

在 4.2 以前,self 是全局保留关键字,因此若是在逃逸闭包中若是在闭包中把 self 标记为 weak 后,若是要使用须要使用 ` 包起来:git

guard let `self` = self else { return }
复制代码

虽然这样解决了变量名的问题,可是也带来另一个困扰,控制台里不会显示一个名为 self 的变量。因此也有一种广泛的作法是取个别名,好比 strongSelf:github

doSomething(then: { [weak self] in
    guard let strongSelf = self { else return }
    strongSelf.doSomethingElse()
)
复制代码

虽然这种写法达到了目的,可是若是一个刚上手的开发者看到这样的写法确定会一头雾水。swift

我等屁民能作的固然就是给苹果爸爸不断的提意见啦。皇天不负有心人,在 4.2 中苹果终于响应了这个要求!如今 otional binding 中 self 再也不做为保留关键字。 如今能够光明正大这么写了:闭包

guard let self = self else { return }
复制代码

固然取消了这个限制后也意味着 self 可能不必定是 self 了:app

var number: Int? = nil
      if let self = number {
      	print(self) // 这里的 self 是 number:Int
       }
复制代码

但愿你们使用 self 做为 optional binding 变量名的时候仍是用在正确的地方,省得形成其余的困扰。ui


SE0079:Allow using optional binding to upgrade self from a weak to strong referencespa

相关文章
相关标签/搜索