Swift 5 1 16 錯誤處理

2021-10-05 22:08:25 字數 2713 閱讀 1984

在swift中,錯誤由符合error協議的型別的值表示。error是空協議,表示型別可用於錯誤處理。

swift中的錯誤處理類似於其他語言中的異常處理,使用了trycatchthrow關鍵字。但是與許多其他語言(包括objective-c)不一樣的是,swift中的錯誤處理不涉及展示函式呼叫的堆疊資訊。因此throwreturn語句的效能相當。

使用丟擲函式來傳播錯誤

丟擲函式:函式宣告中標記有throws關鍵字。 在函式宣告的引數(...)後,返回箭頭->前使用throws關鍵字,表示此函式,方法或初始化方法可以丟擲錯誤。

func throwerror()throws -> string

func notthrowerror() -> string

複製**

丟擲函式可以傳播錯誤,通過丟擲其中的錯誤到函式被呼叫的範圍內。需要注意的是只有丟擲函式可以傳播錯誤。在非丟擲函式內的丟擲的錯誤必須在函式內處理。 丟擲函式示例:

enum vendingmachineerror : error 

struct item

class vendingmachine

guard item.count > 0 && item.count > count else

guard item.price * count <= coins else

//可以成功購買

coins -= item.price * count

goods[name] = item.init(price: item.price, count: item.count - count)

}}複製**

使用try關鍵字呼叫丟擲函式,以傳播錯誤。丟擲函式傳播錯誤舉例:

class customer 

//可丟擲函式

func buy() throws -> void

}複製**

使用do-catch處理錯誤

do-catch語句處理錯誤的形式:

do  catch pattern 1  catch pattern 2 where condition  catch 

複製**

進行錯誤處理的操作示例

class handleerror  catch vendingmachineerror.invalidgoods  catch vendingmachineerror.stockinsufficient  catch vendingmachineerror.coininsufficient(coinneeded: let x)catch

} }複製**

class handleerror  catch

}}複製**

判斷捕獲的錯誤型別:

class handleerror  catch is vendingmachineerror  catch 

}複製**

將錯誤轉換為可選值

使用try?將錯誤轉換為可選值來處理。如果在評估try?表示式時丟擲了錯誤,則表示式的值為nil

func somethrowingfunction() throws -> int 

let x = try? somethrowingfunction()

複製**

展開try?的寫法:

let y: int?

do catch

複製**

禁止錯誤的傳播

使用try!來禁止錯誤的傳播,當所呼叫的丟擲函式報錯時,將觸發執行時錯誤。

let x = try! somethrowingfunction()

複製**

使用defer關鍵字可以在當前範圍退出時,延遲執行指定的清理操作:比如關閉檔案,清理記憶體等操作。不管是丟擲錯誤還是由於返回或中斷等語句離開**塊,defer都將允許你執行其中的語句。 延遲操作語句:是由defer關鍵字和稍後要執行的語句組成的。該語句中不能包括控制轉移的語句,如:returnbreak;也不能丟擲錯誤。 延遲操作語句的執行順序和其在**中寫入的位置是相反的,也就是說最後寫入的會首先被執行,依次類推。 延遲執行,在沒有錯誤需要處理的情況下也可以使用。

func processfile(filename: string) throws 

while let line = try file.readline()

// close(file) is called here, at the end of the scope.

}}複製**

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...