Swift Try / Catch NSJSONSerialization

时间:2015-07-06 23:03:55

标签: json swift try-catch swift2

我正在运行带有try catch的NSJSONSerialization命令,但是当命令返回nil时它仍然失败。我尝试捕获的错误是什么?

fatal error: unexpectedly found nil while unwrapping an Optional value发生在设置z的行。捕捉为什么不处理这个?

    func reachForWebsite(){
    let url = NSURL(string: "https://myURL")
    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
        do {
            let z = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as! [NSObject: AnyObject]
        } catch let myJSONError {
            print(myJSONError)
        }
    }
    task!.resume()
}

2 个答案:

答案 0 :(得分:3)

do - try - catch进程会捕获引发的错误,但不是一般化的异常处理过程。和以前一样,作为开发人员,您仍然有责任防止出现异常(例如强制解包可选的NSData)。

因此,在继续操作之前,请检查以确保data不是nil。同样,除非你确信演员阵容不会失败,否则不要在演员阵容中使用as!guarddatanil更安全,并执行JSON与字典的可选绑定:

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { data, response, error in
    guard data != nil else {
        print(error)
        return
    }

    do {
        if let z = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as? [String: AnyObject] {
            // do something with z
        }
    } catch let parseError {
        print(parseError)
    }
}
task.resume()

答案 1 :(得分:2)

您需要检查errordata的值,然后再尝试将它们NSJSONSerialization解析 - data可能为零,这就是触发崩溃的原因