swift基礎day6 錯誤處理

2021-10-11 19:10:18 字數 2078 閱讀 1748

錯誤處理

swift 在執行時提供了丟擲、捕獲、傳遞和操作可恢復錯誤等支援。swift 中的錯誤處理涉及到錯誤處理模式與cocoa有關。

表示與丟擲錯誤

遵循error 協議。

//表示與丟擲錯誤

enum

vendingmachineerror

:error

throw

vendingmachineerror

.insufficientfunds

(coinsneeded:

5)

處理錯誤

1.用 throwing 函式傳遞錯誤

乙個 throwing 函式可以在其內部丟擲錯誤,並將錯誤傳遞到函式被呼叫時的作用域。

注:只有 throwing 函式可以傳遞錯誤。任何在某個非 throwing 函式內部丟擲的錯誤只能在函式內部處理。

throw 語句會立即退出方法.

struct

item

class

vedingmachine

guard item.

count

>

0else

guard item.price <= coinsdeposited else

coinsdeposited -

= item.price

var newitem = item

newitem.

count-=

1 inventory[name]

= newitem

}}

throwing 構造器能像 throwing 函式一樣傳遞錯誤。例如下面**中的 purchasedsnack 構造器在構造過程中呼叫了 throwing 函式,並且通過傳遞到它的呼叫者來處理這些錯誤。

struct

purchasedsnack

}

2.用 do-catch 處理錯誤

一般形式:

do

catch pattern 1

catch pattern 2

where condition

catch

能夠丟擲錯誤的函式既可以使用 do-catch 語句處理,也可以讓呼叫方來處理錯誤。如果錯誤傳遞到了頂層作用域卻依然沒有被處理,你會得到乙個執行時錯誤。

3.將錯誤轉換成可選值

try?

對所有的錯誤使用try?處理:

func

fetchdata()

->

data?if

let data =

try?

fetchdatafromserver()

return

nil}

4. 禁用錯誤傳遞

有時你知道某個 throwing 函式實際上在執行時是不會丟擲錯誤的,在這種情況下,你可以在表示式前面寫 try! 來禁用錯誤傳遞,這會把呼叫包裝在乙個不會有錯誤丟擲的執行時斷言中。如果真的丟擲了錯誤,你會得到乙個執行時錯誤。

let photo =

try!

loadimage

(atpath:

)

指定清理操作

使用 defer 語句在即將離開當前**塊時執行一系列語句。該語句能執行一些必要的清理工作。可以用 defer 語句來確保檔案描述符得以關閉,以及手動分配的記憶體得以釋放。

defer 語句將**的執行延遲到當前的作用域退出之前。延遲執行的操作會按照它們宣告的順序從後往前執行——也就是說,第一條 defer 語句中的**最後才執行,第二條 defer 語句中的**倒數第二個執行,以此類推。最後一條語句會第乙個執行。

func

processfile

(filename:

string

)throw

while

let line =

try file.

readline()

}}

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