如何在Swift 2中使用NSURLSession的dataTaskWithURL?

时间:2015-06-19 06:30:42

标签: nsurlsession swift2 xcode7 nserror

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

        let connectionSession = NSURLSession.sharedSession()

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

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

  

类型'(_,_,_)抛出函数的无效转换抛出 - >   _'到非投掷函数类型'(NSData?,NSURLResponse?,NSError?) - >空隙'

我该如何解决这个问题?

4 个答案:

答案 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。