異常處理,英文名為exceptional handling, 是代替日漸衰落的error code方法的新法,提供error code 所未能具體的優勢。異常處理分離了接收和處理錯誤**。這個功能理清了程式設計者的思緒,也幫助**增強了可讀性,方便了維護者的閱讀和理解。 異常處理(又稱為錯誤處理)功能提供了處理程式執行時出現的任何意外或異常情況的方法。異常處理使用 try、catch 和 finally 關鍵字來嘗試可能未成功的操作,處理失敗,以及在事後清理資源。
異常處理,是程式語言或計算機硬體裡的一種機制,用於處理軟體或資訊系統中出現的異常狀況(即超出程式正常執行流程的某些特殊條件)。
它有功能強大的控制流語句,像`do`、`try`、`catch`、`guard`和`defer`。我們能夠使用這些關鍵字去操控我們的**,更精確地執行我們的**。
關聯,在objective-c中,異常處理一般都是使用nserror類接收異常和丟擲異常,使用方法像這樣
1
2
3
4
5
6
7
nserror *error = nil;
nsstring *string = [[nsstring alloc] initwithcontentsoffile:@
"filepath"
encoding:nsutf8stringencoding error:&error];
if
(error != nil)
// code...
不得不說,swift的異常處理更為優雅,下面會重點介紹。
demo
構建異常型別
我們可以構建自己的異常型別,它只是乙個列舉,遵循errortype,像是這樣
1
2
3
4
5
6
enum myerrorhandling: errortype
定義函式可丟擲異常
這裡值得一提的是,只有函式才能夠丟擲異常。我們需要在引數後和返回值前加上throws關鍵字,並用guard捕捉異常,用throw丟擲異常。
1
2
3
4
5
6
func myload(item: string?) throws -> string
return
newitem
}
guard: guard必須與else配合使用,只有當guard審查的條件成立,guard之後的**才會執行,否則丟擲異常。
捕獲/處理異常
我們使用do-try-catch去獲取並處理異常
1
2
3
4
5
do
catch
如果只包含乙個catch語句,那麼所有的錯誤都會在這個catch中執行,我們能夠捕抓其錯誤資訊
1
2
3
4
5
do
catch
let error as nserror
我們在使用catch時,它是能夠進行模式匹配的,我們能夠進行更精準的錯誤匹配處理
1
2
3
4
5
6
7
do
catch
myerrorhandling.error1
catch
myerrorhandling.error2
如果我們不需要捕抓錯誤,那麼我們可以使用try!或try?去執行該函式
1
try
? myload(nil)
不建議使用try!,使用try?會更加安全。因為如果當有錯誤捕抓到時,程式會直接崩潰
defer(延遲執行)
那麼我們何時需要使用到defer?這裡使用官方的例子,比如我們需要讀取某檔案內容並處理,你需要開啟這個檔案,最後你需要關閉這個檔案。當一切順利的時候,程式一直往下執行,檔案也將會被關閉。那麼當中間出現一些錯誤呢?例如在某個環節執行失敗了,但是你依然是需要去關閉該檔案,在此defer就表現得很強大了。在這個例子中,我們可以把關閉檔案的**放到defer裡面,在defer裡的**無論是函式執行成功或失敗都會被執行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func myload(item: string?) throws -> string
defer
guard let newitem = item
else
return
newitem
}
需要注意的是,defer語句可以有多個,它們的執行順序是handle 1 -> handle 2。不難理解,它們的執行順序是先進後出的。
宣告
博文出處:
Swift2 0異常處理
在丟擲異常之前,我們需要在函式或方法的返回箭頭 前使用 throws 來標明將會丟擲異常 func mymethodretrunstring throws string func mymethodretrunnothing throws func mymethod throws do catch m...
Swift 2 0 異常處理
如何建造異常型別?在 ios 開發當中,我們會面對很多異常處理。在 cocoa touch 中我們使用 nserror 來進行異常處理。在新的 swift 2.0 中,我們可以使用新的 errortype protocol。在 swift 中,enum 是最好的方法建立屬於你自己的異常型別,你只要在...
swift丟擲異常 Swift 2 0 異常處理
wwdc 2015 宣布了新的 swift 2.0.這次重大更新給 swift 提供了新的異常處理方法。這篇文章會主要圍繞這個方面進行討論。如何建造異常型別?在 ios 開發當中,我們會面對很多異常處理。在 cocoa touch 中我們使用 nserror 來進行異常處理。在新的 swift 2....