-
错误的表示和抛出
-
Error协议
-
在Swift中,用符合Error
协的类型值来表达错误,用throw
来抛出这个错误,
当使用throw
抛出错误后,在你处理完成之前,进程会中断,所有下面的语句都不会执行
enum VendingMachineError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock } var error = VendingMachineError.insufficientFunds(coinsNeeded: 5) print(error) throw error print("永远不会执行")
- #####用函数传递错误:
Swift中,在方法返回值的->
符号前添加throws
关键字,表明某个方法可以抛出错误.当我们调用该类型方法时,必须使用do-catch
,或者try
,/try!
来处理错误,或者将其传递给下一个方法,
- ######"do-catch":
使用do抛出一条错误,这个错误将会与catch
中的字句逐一匹配.
- ######"try?":
将错误转换成可选值,当抛出错误时,try?
会返回nil
,若无错误抛出时,会返回方法对应的返回值
- ######"try!":
禁用错误传递,只有明确不会抛出错误时,才使用try!
,否则当抛出错误,程序会报错
- ######"defer":
延迟处理,被defer
包裹的闭包代码,将会在当前代码块执行完成后进行,注意,不能在其内包含任何控制转移语句,也不能抛出错误
enum StringIsEmpty:Error { case stringIsEmpty } func throwsError(str:String) throws -> String { guard !str.isEmpty else { defer { print("已经解决") } print("抛出错误") throw StringIsEmpty.stringIsEmpty } return str+" is not empty" } let error:String? do { try throwsError(str: "") } catch StringIsEmpty.stringIsEmpty { print("is empty") } let str = try? throwsError(str: "asd") let str1 = try! throwsError(str: "asd")
网友评论