22

古いコードをベータ 4 に変換するとき、エラーを NSError にキャストし続けているようです。これにより、「'Error' から 'NSError' への条件付きキャストは常に成功する」という警告が表示されることさえあります。エラーの最適な使い方を理解していないように感じます。error.code、error.localizedDescription のように考えたい... これらのエラーの変更を説明する適切なドキュメントやチュートリアルはありますか?

例えば:

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

今、私は次のようなことをしています:

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

しかし、それは「「エラー」から「NSError」への条件付きキャストは常に成功します」という警告を出します

4

3 に答える 3

35

エラーは、String が NSString にブリッジ可能であるのと同じ方法で NSError にブリッジ可能です。つまり (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 に答える