2015-09-24 7 views
17

私はこの方法をSwift 1.2:NSURLConnection.sendSynchronousRequest(:_:_:_)で非常に使いましたが、これは明らかにiOS9では廃止されています。しかし、今でも動作しますが、新しいSwift 2.0エラー処理が使用され、エラーが発生した場合にエラーメッセージがどのように表示されるのか分かりません。時間がなくなったら。Swift 2.0でエラーメッセージを表示するにはどうすればよいですか?

私はそれをdo-catchに入れて、methoの前で試してみる必要があると知っていますが、エラーメッセージをキャッチする方法はわかりません。

do { 
    let data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: nil) 
    return data 
} 
catch _ { 
    return nil 
} 

私はNSErrorとその説明プロパティを使用する前に、今は手がかりがありません。

+0

https://www.hackingwithswift.com/new-syntax-swift-2-error-handling-try-catch – CptEric

答えて

31

使用自動error変数、そしてあなたが望むなら、あなたはNSErrorにキャストすることができます

catch { 
    let nsError = error as NSError 
    print(nsError.localizedDescription) 
} 
+1

エラーが「NSError」でない場合はどうなりますか? – redent84

+2

@ redent84:すべてのErrorTypeはNSErrorに自動的にブリッジされ、「Swift with Cocoa and Objective-C」のマニュアルに記載されています。 –

+7

または、単に「catch let error as NSError {...}」としてください(例:http://stackoverflow.com/questions/30954722/swift-2-executefetchrequest-error-handling)。 –

4

あなたは今ErrorTypeを継承する任意のオブジェクトを投げ、そしてcatch文でカスタム処理を提供することができます。エラーをNSErrorにキャストして、サードパーティのエラーを処理するlocalizedDescriptionにアクセスすることもできます。

が操作を完了できませんでした:NSError列挙名に等しくdomainで、列挙値と、次の形式の自動生成localizedDescriptionに等しいcode生成する列挙ErrorType鋳造

。 (DOMAINエラーコード。)

例えば、次のコード

enum AwfulError: ErrorType { 
    case Bad 
    case Worse 
    case Terrible 
} 

func throwingFunction() throws { 
    throw AwfulError.Worse 
} 

do { 
    try throwingFunction() 
} 
catch AwfulError.Bad { 
    print("Bad error") 
} 
catch let error as NSError { 
    print(error.localizedDescription) 
} 

操作が完了できなかった

を印刷します。 (AwfulErrorエラー1)

0

はスウィフト2を指定する質問のタイトルにもかかわらず、この答えは、@ redent84が指摘するように、スウィフト2以降Errorオブジェクトは自家製のものであってもよいスウィフト3について

です。

// Method to print an unknown Error type object to the system output. 
    static func printCaughtError(_ unknownError : Error) { 
     let objectDescription = String(describing: unknownError) 
     let localizedDescription = unknownError.localizedDescription 
     if localizedDescription != "" { 
     if localizedDescription.contains(objectDescription) { 
      print(localizedDescription) 
      return 
     } 
     if !objectDescription.contains(localizedDescription) { 
      print(objectDescription + ": " + localizedDescription) 
      return 
     } 
     } 
     print(objectDescription) 
    } 

その後、あなたはこのようにそれを呼び出すことができます:

catch { 
     printCaughtError(error) 
    } 
ここで私は任意の特定のエラーの種類を指定していない「キャッチ」文で使用可能なデフォルトのエラーオブジェクトを解析し、印刷するに書いた方法です
関連する問題