1

在使用 Swift 1 时,这段代码运行良好:

        let connectionSession = NSURLSession.sharedSession()

        let task = connectionSession.dataTaskWithURL(currentURL!,  completionHandler:  { (data, response , error) in
            ...

在 Swift 2 中,我收到以下编译器错误:

从 '(_, _, _) throws -> _' 类型的抛出函数到非抛出函数类型 '(NSData?, NSURLResponse?, NSError?) -> Void' 的无效转换

我怎样才能解决这个问题?

4

4 回答 4

1

NSJSONSerialization.JSONObjectWithData在完成处理程序中使用,您需要捕获错误:

    do {
        var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
        // Do Stuff
    } catch {
        // handle error
    }
于 2015-09-02T12:29:18.153 回答
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()
于 2015-06-19T06:38:55.783 回答
0

正如@MartinR 指出的那样,事实证明问题不在调用 NSURLSession 的 dataTaskWithURL 而是在完成处理程序的深处(更具体地说,在 Swift 1 -> Swift 2 转换“尝试”期间添加的一个不对应抓住)。我看到其他人也有类似的问题(个人博客中的问题),并将向 Swift 人员提交增强请求以获得更好的错误描述。

于 2015-06-19T08:03:01.653 回答
0

在 Swift 2、XCode 7 中,Apple 在几个 API(不是全部)中用 ErrorType 替换了 NSError。

您可能会在自己的代码中明确使用 NSError。用 Apple 使用 ErrorType 的 ErrorType 替换您自己的 NSError 用法。

于 2015-08-09T09:00:43.467 回答