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) 會在這裏被調用,即做用域的最後。 }