在检查它是否为零之后强制打开可选项是否安全

时间:2018-02-19 02:15:45

标签: swift

我有一个网络方法,它以Error作为参数返回完成闭包。

我通常会避免强行展开,但在这种情况下,我会使用guard语句检查error是否不是nil

guard error == nil else {
    print(error!)
    return
}

...

我正在调用的方法来自SDK,所以我真的不知道那里发生了什么。

一般来说,这种力量展开线程是否安全?

1 个答案:

答案 0 :(得分:11)

ifguard之间的区别很简单,但在您的情况下,您应该使用if,而不是guard。当预期某些值存在以使函数按预期执行时,应使用guard。您希望error出现,但如果不是nil,则必须return。所以你应该使用if let

if let error = error {
    print(error)
    return
}

这样,您不需要使用强制解包,它可以改善代码的表示方式。

回到你的问题“一般情况下,这种力量是否解开线程是否安全?”,假设你真的在讨论线程安全性,那肯定是线程安全的。闭包变量是不可变的。

如果你在谈论安全性(即“致命错误:在展开”可选值“时意外发现nil),那么它也肯定是安全的。 <{1}}在打开它之前不能error(因为nil),因此展开力是安全的。

总之,您当前的代码是防弹的,但使用guard可能会更好。