Swift 2.0 推出的新的异常处理方法:使用 do-catch 机制获取和处理异常
try?
如果解析成功,就有值,如果转换失败,大多数会返回nil
try!
当开发者非常确定某个方法或者函数,在使用时候是绝对不会抛出任何异常的,这种情况下我们可以使用 try!
do-catch
最安全,但是也是最麻烦的
获取和处理异常,使用 catch 可以对异常的解析进行更为高级的处理
使用 throws 来声明异常,标明将会抛出异常,使用 throw 抛出异常
反序列化的时候经常会使用到
let jsonStr = "{\"name\":\"zhangsan\"}"
let data = jsonStr.data(using: .utf8)
// 反序列化 throw 抛出异常
// 方法一:推荐 try?:如果解析成功,就有值,如果转换失败,大多数会返回nil
let json = try? JSONSerialization.jsonObject(with: data!, options: [])
print(json ?? "没有值")
// 方法二:有风险,强烈不推荐 try!:如果解析成功,就有值,否则崩溃
let json1 = try! JSONSerialization.jsonObject(with: data!, options: [])
print(json1)
// 如果数据格式出现错误,变成下面的形式(name左侧的引号缺失),就会引起崩溃:
let jsonStr = "{name\":\"zhangsan\"}"
// 方法三:处理异常,能够接受到错误,并且输出错误
// 缺点:语法结构复杂
do {
let json3 = try JSONSerialization.jsonObject(with: data!, options: [])
print(json3)
} catch {
// 直接可以输出错误
print(error)
}