天天看點

Swift 中的錯誤處理

Swift 錯誤處理

  • 在 Swift 中使用遵守 Error 協定的類型來表示錯誤,這是一個來自系統的空協定,凡是遵守該協定的類型都可以用于錯誤處理 Swift

    中枚舉類型最适合建構一組相關的錯誤狀态

enum FailError : Error {
    case ErrorOne
    case ErrorTwo
    case ErrorThree
    case ErrorFour
}           

用 throwing 函數傳遞錯誤

  • 抛出錯誤使用關鍵字 throw
  • 可能會抛出錯誤的函數和方法必須在定義時聲明,方法是在傳回箭頭->前添加 throws 關鍵字,一個标有 throws 關鍵字的函數被稱為 throwing 函數
func TestError(_ num : Int) throws -> String {

    switch num {
        case 1:
            throw FailError.ErrorOne
        case 2:
            throw FailError.ErrorTwo
        case 3:
            throw FailError.ErrorThree
        case 4:
            throw FailError.ErrorFour
        default:
            return "成功"
    }
}           

使用do-catch 處理錯誤

  • 可以使用一個 do-catch 語句運作一段閉包代碼來處理錯誤,如果在 do 子句中代碼抛出異常,這個錯誤會在 catch 子句中比對

    進而決定哪條子句能夠處理它

do {
    try TestError(4)
} catch FailError.ErrorOne {
    print("ErrorOne")
} catch FailError.ErrorTwo {
    print("ErrorTwo")
} catch FailError.ErrorThree {
    print("ErrorThree")
} catch FailError.ErrorFour {
    print("ErrorFour")
}           

将錯誤轉化為可選值

  • 可以使用 try? 将錯誤轉換成一個可選值來處理錯誤。如果 try?表達式執行時一個錯誤被抛出,那麼表達式的值為 nil
try? TestError(4)
print(try? TestError(5))

if let val = try? TestError(4) {
    print("---成功")
} else{
    print("---失敗")
}           

禁用錯誤傳遞

  • 雖然在程式中使用了 throw 關鍵字,但是我們可以確定不會抛出任何異常,這是我們就可以表達式前添加 try! 用來強制禁止錯誤傳遞
try! TestError(5)
print(try! TestError(5))