error
協議的型別的值表示。error
是空協議,表示型別可用於錯誤處理。
swift中的錯誤處理類似於其他語言中的異常處理,使用了try
,catch
和throw
關鍵字。但是與許多其他語言(包括objective-c)不一樣的是,swift中的錯誤處理不涉及展示函式呼叫的堆疊資訊。因此throw
與return
語句的效能相當。
使用丟擲函式來傳播錯誤
丟擲函式:函式宣告中標記有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
關鍵字和稍後要執行的語句組成的。該語句中不能包括控制轉移的語句,如:return
和break
;也不能丟擲錯誤。 延遲操作語句的執行順序和其在**中寫入的位置是相反的,也就是說最後寫入的會首先被執行,依次類推。 延遲執行,在沒有錯誤需要處理的情況下也可以使用。
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...