swift 中錯誤處理

2021-10-06 20:43:20 字數 2290 閱讀 9626

enum

customerror

:error

定義乙個測試用的類

class

testerrorclass

name = s;

}func

showstring()

}

第一種使用方式,執行**後,直接丟擲異常,中止執行:

let tes =

trytesterrorclass

(s:""

)

執行結果:

__lldb_expr_123.customerror.error1
第二種使用方式,將try換成try? 執行**後,tes返回nil,後續**繼續執行:

let tes =

try?

testerrorclass

(s:""

)if tes ==

nilelse

執行結果:

error:tes is nil.
修改一下testerrorclass,讓其丟擲的異常使用帶引數的error3

class

testerrorclass

name = s;

}func

showstring()

}docatch

customerror

.error1

catch

customerror

.error2

catch

customerror

.error3

(let str)

當執行到 let tes = try testerrorclass(s:"") 這行語句時,產生了異常,直接跳轉到catch 去匹配一致的錯誤型別後,執行對應的**斷.執行結果如下:

customerror.error3: 名字不能為空
如果不需要做型別區分處理,可以用以下方式:

do

catch

iscustomerror

這種情況下只要屬於customerror都會執行到該分支**,執行結果如下:

customerror...
如果將try?加到do…catch 會如何呢,其實就相當於永完不會catch到異常一樣,因為直接返回nil值了,系統也會給給出警告提示.

當有些異常在測試**時是已經知道的,並且不想帶有提示和警告,可以使用try! 慎用。。。

比如上面的例子,呼叫testerrorclass的地方是乙個函式,這樣的放在,這個函式也要定義為可能丟擲異常

如果你非常確定這個 testfunc在正式環境使用中,是不可能產生異常的,那可以改為下面這樣:

func

testfunc()

testfunc

()

使用 defer語句,可以保證在**執行完離開當前**塊前最後執行的語句合集,包括有異常產生的情況.

enum

fileerror

:error

class

testerrorclass

func

readfile

(filename:

string

)throws

->

string

print

("讀取檔案........")do

catch

isfileerror

return

"讀取的全部內容"}}

let t =

testerrorclass()

let c =

try? t.

readfile

(filename:

"abc.txt"

)

執行結果如下:

開啟檔案........

讀取檔案........

讀取檔案發生了異常.

defer: 關閉檔案.

Swift 錯誤處理

宣告列舉錯誤型別 enum printererror error 捕捉異常的五種方式 1.使用throw 來丟擲乙個錯誤 func send job int,printername string throws string return job sent 2.do catch 在 塊中執行操作,do...

Swift 錯誤處理

override func viewdidload 丟擲錯誤 throw vendingmachineerror.insufficientfunds coinsneeded 5 2.處理錯誤 swift 中有四種方式處理錯誤 1.將錯誤從乙個函式傳播 propagate 到呼叫它的 2.用 do c...

Swift 錯誤處理專題

playground noun a place where people can play import uikit 下面的三個用於除錯,在真機上不起作用 assert 1 0 必須滿足括號裡面的邏輯,不然停止 assert 1 0,error 必須滿足括號裡面的邏輯,不然停止並報錯 asserti...