web-dev-qa-db-ja.com

Xcode 8ベータ4でのSwiftでのエラーの仕組み

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

例えば:

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

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

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

ただし、「 'Error'から 'NSError'への条件付きキャストは常に成功します」という警告が表示されます。

21
Jason Hocker

エラーは、StringがNSStringにブリッジ可能であるのと同じ方法でNSErrorにブリッジ可能です。つまり、NSErrorとしてのエラーが機能します。

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

これを行う:

Swift 3.0およびSwift 4.

if error._code == NSURLErrorCancelled { }
22
Van Du Tran

Swift 3が変更されました。 リリースノート でNSErrorを検索してください。Quote:

さらに、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)
}
4
Code Different