【问题标题】:How to use NSURLSession's dataTaskWithURL with Swift 2?如何在 Swift 2 中使用 NSURLSession 的 dataTaskWithURL?
【发布时间】:2015-06-19 06:30:41
【问题描述】:

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

        let connectionSession = NSURLSession.sharedSession()

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • Swift 1 中没有try,帽子代码怎么能正常工作?
  • Ups,我正在从我的一个实验中复制...现在问题已解决。
  • task!.resume() 已用于 Swift 1
  • 该代码片段在 Swift 2 中不会导致编译器错误。问题可能出在完成处理程序中。请展示一个(小)完整的独立示例来说明问题。
  • @MartinR 宾果游戏!我在 try/catch 内部遇到了问题。干杯!

标签: nsurlsession swift2 xcode7 nserror


【解决方案1】:

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

    do {
        var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
        // Do Stuff
    } catch {
        // handle error
    }

【讨论】:

    【解决方案2】:

    你可以使用这样的可选值

     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()
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-18
          • 1970-01-01
          相关资源
          最近更新 更多