Swift 2 iOS 9 Do Catch Try崩溃,发现意外的nil



我正在尝试熟悉swift 2和iOS 9的新do catch语句

我的问题是,当NSURLSession发生错误时,data参数返回nil, error返回一些东西。在iOS 8中,这是预期的功能,我们只是使用if语句来查找数据是否为nil

然而,与do catch,有新的try关键字,我认为是为了看看是否有什么工作,如果它没有那么默认为任何代码写在catch

然而,因为数据是nil,我得到一个意外的崩溃。这是预期的功能,为什么当我的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

这里崩溃了,因为数据!为nil . .因为有一个NSURLSession错误

            print(jsonResult)


        } catch {
            print(error)
        }
    })
    task.resume()

这是因为catch只捕获函数"抛出"的内容。

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

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

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

相关内容

最新更新