我有一个网络方法,它以Error
作为参数返回完成闭包。
我通常会避免强行展开,但在这种情况下,我会使用guard
语句检查error
是否不是nil
:
guard error == nil else {
print(error!)
return
}
...
我正在调用的方法来自SDK,所以我真的不知道那里发生了什么。
一般来说,这种力量展开线程是否安全?
答案 0 :(得分:11)
if
和guard
之间的区别很简单,但在您的情况下,您应该使用if
,而不是guard
。当预期某些值存在以使函数按预期执行时,应使用guard
。您不希望error
出现,但如果不是nil
,则必须return
。所以你应该使用if let
:
if let error = error {
print(error)
return
}
这样,您不需要使用强制解包,它可以改善代码的表示方式。
回到你的问题“一般情况下,这种力量是否解开线程是否安全?”,假设你真的在讨论线程安全性,那肯定是线程安全的。闭包变量是不可变的。
如果你在谈论安全性(即“致命错误:在展开”可选值“时意外发现nil),那么它也肯定是安全的。 <{1}}在打开它之前不能error
(因为nil
),因此展开力是安全的。
总之,您当前的代码是防弹的,但使用guard
可能会更好。