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)
}
我正在尝试使用 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)
}