我已经开始将我的一个项目转换为Swift 2,并且遇到了这个问题。下面开始这个块是完全有效的try
/catch
,实际上它是由Xcode迁移工具生成的。Swift 2 try/catch
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 {
我得到这个错误:
Invalid conversion from throwing function of type '(_, _, _) throws -> Void' to non-throwing function type '(NSData?, NSURLResponse?, NSError?) -> Void'
我也发现:
} catch _ {
的作品,但对我来说很多好事。
我错过了什么,或者我应该提交一个错误?
(这是Xcode中7B5)
完美。除非我抛出自定义的ErrorType,否则我不会这么做。谢谢 !! – rjb101