使用Swift 1时,这段代码运行良好:
let connectionSession = NSURLSession.sharedSession()
let task = connectionSession.dataTaskWithURL(currentURL!, completionHandler: { (data, response , error) in
...
在Swift 2中,我收到以下编译器错误:
类型'(_,_,_)抛出函数的无效转换抛出 - > _'到非投掷函数类型'(NSData?,NSURLResponse?,NSError?) - >空隙'
我该如何解决这个问题?
答案 0 :(得分:1)
要在完成处理程序中使用NSJSONSerialization.JSONObjectWithData
,您将需要捕获错误:
do {
var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
// Do Stuff
} catch {
// handle error
}
答案 1 :(得分:0)
您可以使用像
这样的可选值 var task = session.dataTaskWithURL(url!) {
(NSData?, NSURLResponse?, NSError?) throws -> Void
do {
var jsonData = try NSJSONSerialization.JSONObjectWithData(data!,options: .MutableContainers) as! NSArray
} catch {
// handle error
}
}
task!.resume()
答案 2 :(得分:0)
正如@MartinR所指出的,事实证明问题不是在NSURLSession的dataTaskWithURL的调用中,而是在完成处理程序的深处(更具体地说,在Swift 1中添加了一个 - > Swift 2转换'尝试'没有相应的捕获)。我见过其他人也有类似的问题(个人博客上的问题),并会向Swift人员提出增强请求以获得更好的错误描述。
答案 3 :(得分:0)
在Swift 2,XCode 7中,Apple在几个API(并非所有)中用ErrorType替换了NSError。
您可能会在您自己的代码中明确使用NSError。使用ErrorType替换您自己的NSError用法,其中Apple使用ErrorType。