Swift專題講解十八——異常處理

Swift專題講解十八——異常處理

1、異常的拋出與傳遞

        代碼的運行不少時候並不會徹底按照程序員的設想進行,編寫代碼時進行可控的異常處理機制是十分必要的。一般,對於一個特定的操做,程序員能夠定義一個繼承自ErrorType的枚舉來進行異常類型的描述,使用throw關鍵字來進行異常的拋出,示例代碼以下:javascript

//定義一個自定義的錯誤類型
enum MyError:ErrorType {
    case DesTroyError
    case NormalError
    case SimpleError
}
//進行異常的拋出
throw MyError.NormalError

函數能夠進行錯誤的傳遞,須要使用throws關鍵字來聲明這個函數可能會拋出錯誤,若是不如此聲明,則函數內部拋出的錯誤只能在函數內部解決,throws關鍵字標記的函數內部拋出的錯誤會被傳遞到調用函數的地方,開發者能夠在調用函數的地方捕獲到錯誤描述來作相應處理,示例以下:java

func MyFunc()throws ->  Void {
    throw MyError.NormalError
}

對於可能拋出異常的函數調用,開發者要麼在調用函數的地方捕獲處理這些異常,要麼使用try關鍵字將異常繼續拋出去,等待下一層捕獲者處理。異常的處理後面會介紹,繼續拋出異常示例以下:程序員

try MyFunc()

2、異常的處理

        除了將錯誤繼續向上拋出以外,Swift還提供了3種處理異常的方式。函數

1.使用do-catch語句來捕獲異常

        開發者可使用do-catch語句來捕獲異常,經過異常類型的判斷來分別作處理,示例代碼以下:spa

do{
   try MyFunc()
}catch MyError.DesTroyError{//將打印error1
    print("error1")
}catch MyError.NormalError{
     print("error2")
}catch MyError.SimpleError{
     print("error3")
}catch{//若是上面全部的catch都沒有捕獲 會走這個異常捕獲判斷
    print("all")
}

2.將異常映射爲Optional值

        處理異常拋出的第2中方式是使用try?將異常映射爲Optional值,能夠簡單理解爲,對一個可能拋出異常的函數的調用,若是有異常拋出,則返回值爲nil,若是沒有,則函數順利執行,返回值爲其原返回值,示例以下:code

//將返回nil
try? MyFunc()

注意:返回值爲Void並不是爲nil,結合if-let語句能夠編寫十分飄逸的代碼,示例以下:orm

if let _=try?MyFunc() {
    print("success")
}else{
    print("fail")
}

3.終止異常傳遞

        有時候開發者能夠保證一個可能拋出異常的函數絕對不會拋出異常,這時開發者可使用try!的方式來終止異常的傳遞,可是這樣作有必定風險,若是這個函數真的拋出了異常,則會產生運行時錯誤。示例以下:繼承

try! MyFunc()

3、延時執行語句

        對於某些釋放資源類的操做,開發者老是但願其離開當前代碼塊時被執行,而後一個複雜流程結構可能會因異常拋出,return,break這些方式被終止,所以,Swift中提供了defer語句來進行延時執行一些操做,defer中的語句老是會在當前代碼塊將要結束時才執行,不管它是以哪一種方式結束的,示例以下:ip

//執行此函數將打印
/*
 Care
 finish
 */
func MyFunc()throws ->  Void {
    
    defer{
        print("finish")
    }
    print("Care")
    throw MyError.DesTroyError
    
}

專一技術,熱愛生活,交流技術,也作朋友。資源

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索