1.什么是异常
如果你对Swift有过使用,你就会发现有的方法会出现关键词throws,比如我们解析JSON文件时,会使用以下方法:
open class func jsonObject(with data: Data, options opt: JSONSerialization.ReadingOptions = []) throws -> Any
所谓异常,便就是平常说的错误而已,Swift引入异常机制,就是为了防止我们在编程中忽略一些导致崩溃的错误,接下来,我们就来了解异常机制吧。
2.异常处理
当我们在调用Swift的方法时,如果后面有throws关键词时,一定要注意使用异常机制,处理异常需要用到关键词try。在Swift中有3种处理异常方式:
- try
- try?
- try!
1.try方式
使用try处理异常,当方法出现异常时,是由程序员来处理异常而不是系统来处理,代码结构如下:
let url = URL.init(string: "http://www.baidu.com")
do {
let jsonData = try Data.init(contentsOf: url!, options: Data.ReadingOptions.alwaysMapped)
// 处理数据
print(jsonData)
} catch {
// 处理异常
print(error)
}
一般来说,这种方式很少使用,因为可能有大量的代码放入到异常中或者非异常的括号中,这样代码可读性不好。
2.try?方式
相对于将异常由程序员来处理,交给电脑来处理毫无疑问是最好的方法了,而try?就做到了这一点:
let url = URL.init(string: "http://www.baidu.com")
guard let jsonData = try? Data.init(contentsOf: url!, options: Data.ReadingOptions.alwaysMapped) else {
return
}
没有异常就会返回数据,有异常就返回nil,配合Swift的guard机制,简直不能在爽了,哈哈。
3.try!方式
相对于以上处理方式,try!毫无疑问最简单粗暴也是最危险的,那就是,你的代码是绝对不会出现异常的:
let url = URL.init(string: "http://www.baidu.com")
let jsonData = try! Data.init(contentsOf: url!, options: Data.ReadingOptions.alwaysMapped)
额,万一出现异常了,会怎么样?
崩掉。
3.结论
介绍了三种异常处理,毫无疑问,使用try?和guard是最合适的了,当然,try!最不推荐,除非你的代码不会抛出异常
但是,谁能保证了?