【问题标题】:Swift guard with self带自我的迅捷后卫
【发布时间】:2016-09-07 05:39:25
【问题描述】:

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

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 中做了什么?没有这个,我无法分配给自己。为什么这行得通?使用它是一个好习惯吗?

【问题讨论】:

标签: swift swift-guard


【解决方案1】:

一点更新(我不会在这里提到何时使用它,而是如何使用它)。

从 Swift 4.2 使用应该是这样的:

guard let self = self else { return }

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

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

简而言之,以上与代码中看到的其他情况更一致,例如:

if let myVariable = myVariable

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

【讨论】:

    【解决方案2】:

    Swift Programming Language

    显示如下说明:

    如果您需要为常量或变量指定与保留的名称相同的名称 Swift 关键字,使用时用反引号 (`) 将关键字括起来 作为一个名字。但是,除非您有 绝对别无选择。

    编辑:

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

    【讨论】:

    • 谢谢,这是一个很好的信息。我们是否有任何关于使用我描述的守卫的良好做法的信息?我看到 Apple 不鼓励使用这样的关键字,但在这种情况下,它似乎确实是一个很好的解决方案。你怎么看?
    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多