首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特2试/接

斯威夫特2试/接
EN

Stack Overflow用户
提问于 2015-08-20 23:43:50
回答 1查看 506关注 0票数 2

我已经开始把我的一个项目转换成Swift 2,我遇到了这个问题。在下面启动这个块是完全有效的try/catch,实际上它是由Xcode迁移工具生成的。

代码语言:javascript
复制
do {
       requestData = try NSJSONSerialization.dataWithJSONObject(requestContents, options: [])
} catch var error as NSError {
      requestError = error
      requestData = nil
}

如果在闭包(如dataTaskWithRequest )中使用相同的代码,则会得到一个错误。错误发生在任务分配时,但导致错误的是捕获。下面的内容也可以使用,但我没有捕获错误。

代码语言:javascript
复制
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()

但是,如果我试图用以下方法捕获错误:

代码语言:javascript
复制
} catch let e as NSError {

我知道这个错误:

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

我确实发现:

代码语言:javascript
复制
} catch _ {

很管用,但对我有很大好处。

我是不是漏掉了什么东西,还是应该提交一个窃听器?

(这是Xcode 7b5)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-21 04:19:08

dataTaskWithRequest的完成处理程序不像JSONObjectWithData of NSJSONSerialization那样设计为引发错误,其签名为:

代码语言:javascript
复制
class func JSONObjectWithData(data: NSData, options opt: NSJSONReadingOptions) throws -> AnyObject

执行以下操作将有效(与您尝试过的相同):

代码语言:javascript
复制
catch _

但这不会给我们提供任何关于抛出的错误的细节,即来自class func JSONObjectWithData的错误。

因此,我们需要一种方法来使用不可抛出的dataTaskWithRequest,同时保留抛出的JSONObjectWithData

我尝试了以下几点:

代码语言:javascript
复制
catch let error as NSError
{
     //error specific to JSON serialization
     NSLog("Error in JSON serialization \(error)")
}
catch
{
     //exhaust the error
     NSLog("Some error")
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32130208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档