22

似乎在将我们的旧代码转换为 beta 4 时,我一直将 Error 转换为 NSError。这有时甚至会导致警告“从 'Error' 到 'NSError' 的条件转换总是成功”。我觉得我不明白如何最好地使用错误。我想思考一下 error.code、error.localizedDescription ... 是否有很好的文档或教程来解释这些错误更改?

例如:

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

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

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

但这会给出警告“从 'Error' 到 'NSError' 的条件转换总是成功”

4

3 回答 3

35

Error 可以桥接到 NSError,就像 String 可以桥接到 NSString 一样。即(错误为 NSError)会起作用。

if  (error as NSError).code == NSURLErrorCancelled { 
    // code
}
于 2016-08-13T06:26:59.450 回答
22

做这个:

斯威夫特 3.0 和斯威夫特 4.0

if error._code == NSURLErrorCancelled { }
于 2016-12-15T19:52:21.800 回答
4

Error catching in Swift 3 has changed. Search for NSError in Release Notes. Quote:

Additionally, error types imported from Cocoa and Cocoa Touch maintain all of the information in the corresponding NSError, so it is no longer necessary to catch let as NSError to extract (for example) the user-info dictionary. Specific error types also contain typed accessors for their common user-info keys. For example:

do {
    let regex = try NSRegularExpression(pattern: "(", options: [])
} catch {
    // error is of type NSError already
    print(error.localizedDescription)
}
于 2016-08-02T03:42:07.183 回答