Swift 自卫军

Swift 自卫军,swift,swift-guard,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'。在一个网站上,我看到我可以使用这个字符 但是这个角色在斯威夫特中做什么呢

我以这种方式快速地跳着弱而强的舞蹈:

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关键字,使用时用反勾(`)将关键字括起来 作为一个名字。但是,避免使用关键字作为名称,除非您 绝对没有选择

编辑:

我这样做的方式是使用任何其他名称,例如
strongSelf
,就像您以前使用的那样。因为归根结底,`self`和
strongSelf
都将是一些变量。因此,我建议我们是否可以使用其他变量名,这很好。

有点更新(我在这里不介绍何时使用,而是如何使用)

来自Swift 4.2的用法如下:

guard let self=self-else{return}

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

要了解更多信息,没有比这更好的来源了。解释背后的所有理由和其他考虑

简言之,上述情况与代码中的其他情况更为一致,如:

如果让myVariable=myVariable


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

谢谢,这是一个很好的信息。我们是否有任何关于使用我所描述的防护装置的良好实践的信息?我知道苹果不鼓励使用这样的关键词,但在这种情况下,这似乎是一个很好的解决方案。你怎么看?相关:。有一个建议允许在Swift:的未来版本中使用
guard let self=self else{return}
,并且你的代码在Swift编译器中工作被认为是一个bug:。实际上,整个保护舞蹈是毫无意义的,因为GCD闭包不会导致保留周期。当然,谢谢你通知我。