Swift 2 iOS 9 Do Catch 尝试崩溃并发现意外的 nil

Swift 2 iOS 9 Do Catch Try crashing with unexpected nil found

我正在尝试使用 swift 2 和 iOS 9

来熟悉新的 do catch 语句

我的问题是NSURLSession出错时,数据参数returns nil,错误returns something。在 iOS 8 中,这是预期的功能,我们只是使用 if 语句来查明 Data 是否为 nil

但是对于 do catch,有一个新的 try 关键字,我认为它是为了查看某些东西是否有效,如果没有则默认为任何代码写在 catch

但是,由于数据为零,我遇到了意外崩溃。这是预期的功能吗,为什么当我的 try 方法失败时 catch 没有被调用?

我正在使用 NSURLSession 从 API.

中提取数据

我像这样创建一个 dataTaskWith 请求:

 let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        print(request)
        print(response)
        print(error)

        do {

            let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary

此处崩溃,因为数据!是零..因为有一个 NSURLSession 错误

            print(jsonResult)




        } catch {
            print(error)
        }

    })
    task.resume()

这是因为 catch 只捕获函数 "throws"。

NSJSONSerialization 抛出,但强制展开一个空的 Optional 不会,它总是崩溃。

使用 if let 或新的 guard 函数安全地解包您的值。

do {
    if let myData = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(myData, options: []) as? NSDictionary {
        print(jsonResult)
    }
} catch {
    print(error)
}