錯誤處理
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...