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

Yic*_*man 3 nsurlsession swift ios9 swift2

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

我的问题是,当NSURLSession发生错误时,data参数返回nil,并返回错误.在iOS 8中,这是预期的功能,我们只是使用if语句来确定Data是否为零

然而do catch,有一个新的try关键字,我认为这是为了看看是否有效,如果没有那么默认为任何代码写入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
Run Code Online (Sandbox Code Playgroud)

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

            print(jsonResult)




        } catch {
            print(error)
        }

    })
    task.resume()
Run Code Online (Sandbox Code Playgroud)

aya*_*aio 9

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

NSJSONSerialization 抛出,但强行打开一个空的可选不会,它总是崩溃.

使用if let或新guard功能安全地打开您的值.

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

  • 有时星期一不是最好的一天.大.这说得通. (2认同)