小编典典

Swift 2 iOS 9赶上尝试崩溃与意外的零

swift

我正在尝试熟悉do catchSwift 2和iOS 9 的新声明

我的问题是,当NSURLSession发生错误时,data参数返回nil,而错误返回某些信息。在iOS
8中,这是预期的功能,我们只使用了if语句来查找Data是否为nil。

但是do catch,有了try,我想到了一个new
关键字,它旨在查看是否可以正常工作,如果不能正常工作,则默认为所编写的任何代码catch

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

我正在使用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()

阅读 233

收藏
2020-07-07

共1个答案

小编典典

这是因为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)
}
2020-07-07