我有关闭可能会返回错误。它看起来像:
session.dataTask(with: url) { (data, response, error) in
接下来我想处理错误。我想使用guard语句来解包错误,如果存在,则显示alert和return函数。但我怎么能执行像
这样的事情guard !(let error = error) else { return }
我不能。我可以检查nil然后再次解开错误,但那看起来很难看。或者我可以使用,如果让我解开,但为了错误检查,我更喜欢看守。那么,有没有办法很好地写下面的?
guard !(let error = error) else { return }
答案 0 :(得分:6)
不要与框架作斗争。
如果您想在中使用展开的可选,则大括号使用if let
if let error = error {
print(error)
return
}
如果你想使用guard let
guard let error = error else {
return
}
print(error)
如果error
的(未展开)内容无关紧要,请检查nil
guard error == nil else { ...
if error == nil { ...
答案 1 :(得分:4)
documentation表示调用闭包时:
data
有值,error
为nil
(如果请求成功),data
为nil
,error
有值(如果请求失败)。您真正感兴趣的是数据和成功 无论如何你必须(以某种方式)解开。
因此我会检查data
是否有值。如果失败,则表示您有错误。为了避免强制展开,请使用nil-coalescing运算符:
session.dataTask(with: url) { (data, response, error) in
guard let data = data else {
// The request failed.
let message = error?.localizedDescription ?? "Unknown error"
// Present message ...
return
}
// The request was successful.
// Process data ...
}
答案 2 :(得分:3)
guard error == nil else {
print(error!)
return
}
您可以安全地强制解开身体中的错误,因为您知道它不是空指针。
你最好用
if let error = error {
//handle error
return
}