Swift 2.0
1. guard 的使用
guard 是守护的意识,它与 if 的使用类似。当 guard 后的表达式为假时,会执行 else 后面的内容。常用来判断某个情况是要特意避免的。如:
guard let someValue = valueForKey("key") else { return }
上面的代码使用 KVC 来获取一个值,如果获取失败,会直接返回。上面的代码与下面的代码是等价的,但是使用 guard 代码量要少很多。
let someValue = valueForKey("key") if someValue == nil { return }
2. 异常处理
swift 的异常处理在 swift2.0 中推出。 在 Cocoa Touch 中我们使用 NSError
来进行异常处理。在新的 Swift 2.0 中,我们可以使用新的 ErrorType
protocol。
在 Swift 中, enum
是最好的方法建立属于你自己的异常类型,你只要在你的 enum
中确认新的 ErrorType
。
enum MyError: ErrorType { case NotExist case OutOfRange }
2.1 抛出异常
如果某个函数要抛出异常,需要在函数名之后返回值之前加上 throw 关键字,如
func fun1() throws -> String { // 有返回值 ... } func fun2() throws {// 没有返回值 guard let someValue = valueForKey("key") else { throw MyError.NotExist } }
2.2 处理异常
使用 do-catch 语句来处理异常
do { try functionWillThrowError() } catch MyError.NotExist { // deal with not exist } catch MyError.OutOfRange { // deal with not exist }
接收所有异常
do { ... } catch _ { }
2.3 defer
defer 类似于 Java 中的 try/finally(标准 C++ 里没有try/finally,但是 BCB 里有,题外话),这种语句可以让我们在finally代码块中执行必须要执行的代码。
与 finally 不同的是,defer 是延迟执行,会在代码块快要结束的时候执行 defer 里的代码。
func doSomething() { print("CheckPoint 2") defer { print("Clean up here") } print("CheckPoint 3") } func checkSomething() { print("CheckPoint 1") doSomething() print("CheckPoint 4") } checkSomething() // CheckPoint 1, CheckPoint 2, CheckPoint 3, Clean up here, CheckPoint 4
注意,如果你有多个defer
语句,他们在执行的顺序会和栈一样,最后一个进,第一个出。
http://www.jianshu.com/p/96a7db3fde00
https://www.baidu.com/s?wd=C%2B%2B%E6%9C%89%20try%2Ffinally%E5%90%97&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=14&rsv_sug1=7&rsv_t=bd91SDWFT192HvMdQ7Yh2eYJF91%2BOjhu376ifEJoVU15qRZO3f9piAVfDkZZgaF3tp9o&rsv_sug2=0&inputT=4147&rsv_sug4=4342