2016-09-07 66 views
3

我做的强孰弱舞蹈SWIFT是这样的:斯威夫特后卫自

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中做了什么?没有这个我不能分配给自己。为什么这个工作?使用它是一个好习惯吗?

+1

相关:http://stackoverflow.com/questions/31315358/use-reserved-keyword-a-enum-case。 –

+1

在未来版本的Swift中有一个建议允许'guard let self = self else {return}':https://github.com/apple/swift-evolution/blob/master/proposals/0079-upgrade-self -from-weak-to-strong.md,而且你的代码工作被认为是Swift编译器中的一个错误:https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007425 html的。 –

回答

6

Swift Programming Language

介绍了一份说明,说以下内容:

如果你需要给一个常量或变量相同的名称作为保留 斯威夫特关键字,关键字与反引号(`)当使用它作为名称时 。但是,请避免使用关键字作为名称,除非您绝对没有选择 。

编辑:

我这样做是例如strongSelf像前面那样使用任何其他名称的方式。因为最终`self`和strongSelf都将是一些变量。所以我建议如果我们可以使用其他一些很好的变量名称。

+1

谢谢,这是一个很好的信息。我们是否有任何关于使用像我描述的守卫的良好做法的信息?我看到苹果不鼓励使用这样的关键词,但在这种情况下,它确实似乎是一个很好的解决方案。你怎么看? –