私は、非同期ネットワーク要求の多くを使用しています(ところでiOSの中の任意のネットワーク要求は非同期でする必要があります)と私はより良い、AppleのdataTaskWithRequest
throws
をサポートしていない、そこからエラーを処理する方法を見つけることです。Swift 2で非同期クロージャのエラーを処理する最善の方法は?
私はそのようなコードを持っている:
func sendRequest(someData: MyCustomClass?, completion: (response: NSData?) ->()) {
let request = NSURLRequest(URL: NSURL(string: "http://google.com")!)
if someData == nil {
// throw my custom error
}
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// here I want to handle Apple's error
}
task.resume()
}
私は可能カスタムエラーを解析し、dataTaskWithRequest
から可能な接続エラーを処理する必要があります。 Swift 2はthrows
を導入しましたが、スローサポートがなく、非同期で実行されているため、Appleのクロージャから投げることはできません。
NSError
私の補完ブロックに追加するには唯一の方法がありますが、私が知っているようにNSError
は旧式のObjective-Cの方法です。 ErrorType
は、スロー(afaik)でのみ使用できます。
アップルネットワーククロージャを使用しているときにエラーを処理するための最良かつ最も近代的な方法は何ですか?私が理解しているように、非同期のネットワーク機能を使用する方法はありません。
あなたはスローせずにERRORTYPEを使用することができます。以下のように
さて、あなたはそれを使用することができます。完了ハンドラに戻します。おそらく、Alamofireがどのようにレスポンス/エラーhttps:// githubを扱うのかを見てみたいかもしれません。com/Alamofire/Alamofire/blob/master/Source/Result.swift – doschi