16 Swift錯誤處理

2021-10-10 21:07:03 字數 2199 閱讀 2654

錯誤處理是響應錯誤以及從錯誤中恢復的過程。swift提供了在執行對可恢復錯誤丟擲、捕獲、傳送和操作的高階支援(錯誤處理又稱之為異常處理)。

某些操作並不能總是保證執行所有**都可以執行或總會產生出有用的結果。可選型別用來表示值可能為空,但當執行失敗的時候,通常要去了解此次失敗是由什麼引起的,**就可以做出與之對應的反應。

例如,對磁碟上的某個檔案的讀取操作,該任務會有多種可能失敗的情形,包括指定路徑下檔案不存在,檔案沒有可讀許可權,或檔案的編碼格式不相容。具體區分這些錯誤,可以讓程式解決並處理對應的錯誤,解決不了的錯誤即可以報告給用於。

在swift中,錯誤要遵循errortype協議型別的值來表示。這個協議表示一種可以用做錯誤處理的型別。swift的列舉型別特別適合於建立一組相關錯誤,而列舉的關聯值還可以提供額外的資訊,表示錯誤情形的性質。

// 例如去健身房,下面是影響去健身房的情形

enum myerror:errortype

在swift中有4種錯誤處理方式: 把函式丟擲的錯誤傳遞給呼叫此函式的**、用do-catch語句處理錯誤、將錯誤作為可選型別處理、直接斷言此錯誤根本不會發生。

enum myerror:errortype 

// 丟擲異常(throwing函式)

func checkkeepfit(power:int, time:int, machine:int) throws

guard time > 0 else

guard machine > 0 else

}// 呼叫checkkeepfit函式(即在此函式中處理異常)

func gotokeepfit(power:int, time:int, machine:int)

// 函式呼叫

gotokeepfit(0, time: 1, machine: 1)

輸出結果:

---------

// 呼叫checkkeepfit函式(即在此函式中處理異常)

func gotokeepfit(power:int, time:int, machine:int) catch myerror.nopower catch myerror.notime catch myerror.nomachine catch

}gotokeepfit(0, time: 1, machine: 1)

輸出結果:

沒有體力

enum myerror:errortype 

// 判斷是否為正數

func isplus(a:int) throws -> int

return a

}// 如果`isplus`丟擲異常,那麼x值就是為`nil`

// 否則就是該函式的返回值

let x = try? isplus(10)

// 注意: x自動推斷是為可選型別

print(x!)

// 這裡就是保證y肯定就是不為負數

let y:int

do catch

print(y)

輸出結果:

100

例如使用`loadimage(_:)`函式,該函式即是從給定路徑中載入資源,如果不能被載入則會丟擲乙個錯誤。而和應用是繫結在一起的,應用程式執行時不會有錯誤被丟擲,所以可以讓錯誤傳遞失敗

// 該位址是虛擬的

let photo = try! loadimage("./user/endevent/head.png")

可以使用defer語句在**執行到要離開當前**段之前,再去執行一段**。該**能夠執行必要清理操作,不管是以何種方式離開當前的**段(不論是丟擲錯誤離開還是return或是break語句)。

// 檔案處理

func processfile(filename:string) throws

while let line try file.readline()

// 處理完成,將關閉檔案描述符

close(file)

}}

注意: 即是沒有涉及到錯誤處理**,也可以使用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...