在Xcode 8 beta 4中,Error如何在Swift中工作

时间:2016-08-01 21:01:27

标签: swift3 xcode8-beta4

似乎在将我们的旧代码转换为beta 4时,我一直将错误转换为NSError。这甚至有时会导致警告"条件演员来自错误'到了' NSError'总是成功"。我觉得我不明白如何最好地使用Error。我想像error.code,error.localizedDescription那样思考......有没有很好的文档或教程来解释这些错误的变化?

例如:

func webView(_ webView: UIWebView, didFailLoadWithError error: Error) { 

现在我正在做类似的事情:

if let error = error as? NSError {
 if error.code == NSURLErrorCancelled {

但是这会发出警告"条件演员来自'错误'到了' NSError'永远成功"

3 个答案:

答案 0 :(得分:27)

错误可以桥接到NSError,就像String可以桥接到NSString一样。 I.e(错误为NSError)可行。

if  (error as NSError).code == NSURLErrorCancelled { 
    // code
}

答案 1 :(得分:21)

这样做:

Swift 3.0和Swift 4.0

if error._code == NSURLErrorCancelled { }

答案 2 :(得分:4)

在Swift 3中捕获错误已更改。在Release Notes中搜索NSError。引用:

  

此外,从Cocoa和Cocoa Touch导入的错误类型会保留相应NSError中的所有信息,因此catch let as NSError不再需要提取(例如)用户信息字典。特定错误类型还包含其常用用户信息键的类型化访问器。例如:

do {
    let regex = try NSRegularExpression(pattern: "(", options: [])
} catch {
    // error is of type NSError already
    print(error.localizedDescription)
}