迅速反向防守问题

Evg*_*ban 1 ios swift

我有关闭可能会返回错误.它看起来像:

session.dataTask(with: url) { (data, response, error) in
Run Code Online (Sandbox Code Playgroud)

接下来我想处理错误.我想使用guard语句来解包错误,如果存在,则显示alert和return函数.但我怎么能表现得像

guard !(let error = error) else { return }
Run Code Online (Sandbox Code Playgroud)

我不能.我可以检查nil然后再次解开错误,但那看起来很难看.或者我可以使用,如果让我解开,但为了错误检查,我更喜欢看守.那么,有没有办法很好地写下面的?

guard !(let error = error) else { return }
Run Code Online (Sandbox Code Playgroud)

vad*_*ian 6

不要打架子.

  • @matt这根本不是真的.您可以在`guard`语句中使用相同的名称.这完全是编译. (2认同)

Mar*_*n R 5

文件指出,当盖被称为:

  • 要么 data有一个值并且errornil(如果请求成功),
  • or data isnil并且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 ...
}
Run Code Online (Sandbox Code Playgroud)