1.Swift 中有4
种处理错误的方式。你能够把函数抛出的错误传递给调用此函数的代码、用do-catch
语句处理错误、将错误做为可选类型处理、或者断言此错误根本不会发生。函数
2.wift 中的错误处理并不涉及解除调用栈,这是一个计算代价高昂的过程。就此而言,throw
语句的性能特性是能够和return
语句相媲美的。性能
3.一个标有throws
关键字的函数被称做throwing 函数。若是这个函数指明了返回值类型,throws
关键词须要写在箭头(->
)的前面。只有 throwing 函数能够传递错误。任何在某个非 throwing 函数内部抛出的错误只能在函数内部处理。spa
4.能够使用try?
经过将错误转换成一个可选值来处理错误。若是在评估try?
表达式时一个错误被抛出,那么表达式的值就是nil
。code
let x = try? someThrowingFunction() //等价于 let y: Int? do { y = try someThrowingFunction() } catch { y = nil }
5.能够在表达式前面写try!
来禁用错误传递,这会把调用包装在一个断言不会有错误抛出的运行时断言中。若是实际上抛出了错误,你会获得一个运行时错误。blog
6.能够使用defer
语句在即将离开当前代码块时执行一系列语句。该语句让你能执行一些必要的清理工做,无论是以何种方式离开当前代码块的——不管是因为抛出错误而离开,仍是因为诸如return
或者break
的语句。作用域
if exists(filename) { let file = open(filename) defer { close(file) } // close(file) 会在这里被调用,即做用域的最后。 }