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

Nic*_*ico 3 swift

我有一个网络方法,返回一个完成闭包,带有一个Error参数.

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

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

...
Run Code Online (Sandbox Code Playgroud)

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

一般情况下,这种力量解开线程是否安全?

pap*_*111 12

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

if let error = error {
    print(error)
    return
}
Run Code Online (Sandbox Code Playgroud)

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

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

如果你在谈论安全性(即"致命错误:在展开可选值时意外地发现nil"),它肯定也是安全的.error一定不能nil在你打开它之前(因为guard),因此展开力是安全的.

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