我正在尝试熟悉do catchSwift 2和iOS 9 的新声明
do catch
我的问题是,当NSURLSession发生错误时,data参数返回nil,而错误返回某些信息。在iOS 8中,这是预期的功能,我们只使用了if语句来查找Data是否为nil。
但是do catch,有了try,我想到了一个new 关键字,它旨在查看是否可以正常工作,如果不能正常工作,则默认为所编写的任何代码catch
do
catch
try
但是,由于数据为零,所以我遇到了意外崩溃。这是预期的功能吗,为什么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()
这是因为catch仅捕获函数“抛出”的内容。
NSJSONSerialization 抛出,但是强制展开一个空的Optional却没有,它总是崩溃。
NSJSONSerialization
使用if let或新guard功能安全地解开您的价值观。
if let
guard
do { if let myData = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(myData, options: []) as? NSDictionary { print(jsonResult) } } catch { print(error) }