プロジェクトの 1 つを Swift 2 に変換し始めたところ、この問題に遭遇しました。以下のこのブロックを開始することは完全に有効ですtry
/ catch
、実際にはXcode移行ツールによって生成されました。
do {
requestData = try NSJSONSerialization.dataWithJSONObject(requestContents, options: [])
} catch var error as NSError {
requestError = error
requestData = nil
}
などのクロージャー内で同じコードを使用するとdataTaskWithRequest
、エラーが発生します。エラーはタスクの割り当てにありますが、その原因はキャッチです。以下も機能しますが、エラーをキャプチャしていません。
let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, taskError) -> Void in
if taskError != nil {
NSLog("Error making request: " + taskError!.localizedDescription)
}
else {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
if let parseJSON = json as NSDictionary? {
// do some parsing here
}
}
catch {
NSLog("Error in JSON serialization")
}
}
})
task.resume()
しかし、次の方法でエラーをキャプチャしようとすると:
} catch let e as NSError {
次のエラーが表示されます。
タイプ '(_, _, _) throws -> Void' のスロー関数から非スロー関数タイプ '(NSData?, NSURLResponse?, NSError?) -> Void' への無効な変換
私はそれを発見しました:
} catch _ {
うまくいきますが、それは私にとって良いことです。
何か不足していますか、それともバグを報告する必要がありますか?
(これは Xcode 7b5 です)