迅速守卫自我

时间:2016-09-07 05:39:26

标签: swift swift-guard

我正以这种方式快速做强弱的舞蹈:

dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), { [weak self] in
    guard let `self` = self else {
        return
    }
    self.doSomething(1)
})

在此之前,我使用的是strongSelf而不是`self`。在一个网站上,我发现我可以使用这个字符。

但是这个角色在Swift中做了什么?没有这个,我无法分配给自己。为什么这样做?使用它是一种好习惯吗?

2 个答案:

答案 0 :(得分:7)

Swift Programming Language

提供说明如下:

  

如果需要为常量或变量赋予与保留相同的名称   Swift关键字,在使用时用反引号(`)包围关键字   作为一个名字。但是,除非有,否则请避免使用关键字作为名称   绝对没有选择。

修改

我这样做的方式是使用任何其他名称,例如strongSelf,就像您之前所做的那样。因为最终,'self`和strongSelf都将成为一些变量。所以我建议我们是否可以使用一些其他变量名称。

答案 1 :(得分:5)

一些更新(我将在何时使用它而不是在这里使用,而是如何使用)。

从Swift 4.2起,其用法应类似于:

guard let self = self else { return }

使用`基本上是基于编译器错误的,因此不建议使用。

有关更多信息,没有比this更好的信息来源了。解释所有背后的推理和其他注意事项。

简而言之,以上内容与代码中的其他情况更为一致:

if let myVariable = myVariable

因此不会造成混乱/差异。