1.表示并抛出错误
- 在 Swift 中,错误用符合Error协议的类型的值来表示
enum VendingMachineError: Error { case invalidSelection //选择无效 case insufficientFunds(coinsNeeded: Int) //金额不足 case outOfStock //缺货 } 复制代码
-
swift 枚举,创建一组错误状态,枚举关联值,可以提供错误状态额外信息,遇见错误的时候,可以抛出异常,使用throw
-
throw VendingMachineError. insufficientFunds(coinsNeeded: 5)
2.处理错误
-
swift 中有4中错误处理方法:
-
可以讲函数抛出的异常,传递给调用函数的代码
-
使用
do-cantch
语句处理错误 -
讲错误当作可选项处理
-
断言此处不会出现错误
3.用 throwing 函数传递错误
-
在函数声明参数列表之后加上throw,在箭头(->) 前面
-
func canThrowErrors() throws -> String
-
因为vend(itemNamed:)方法能抛出错误,所以在调用的它时候在它前面加了try关键字。
4.用 Do-Catch 处理错误
-
如果在do子句中的代码抛出了一个错误,这个错误会与catch子句做匹配,从而决定哪条子句能处理它。
5.将错误转换成可选值 try?
- 如果someThrowingFunction()抛出一个错误,x和y的值是nil。否则x和y的值就是该函数的返回值
6.禁用错误传递
- 有时你知道某个throwing函数实际上在运行时是不会抛出错误的,在这种情况下,你可以在表达式前面写try!
7.指定清理操作
-
可以使用defer语句在即将离开当前代码块时执行一系列语句。该语句让你能执行一些必要的清理工作,不管是以何种方式离开当前代码块的——无论是由于抛出错误而离开,还是由于诸如return或者break的语句
-
上面的代码使用一条defer语句来确保open(:)函数有一个相应的对close(:)函数的调用。