2

プロジェクトの 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 です)

4

1 に答える 1