swift文档笔记(十四) -- 错误处理

1.表示并抛出错误 


我们一般实现Error 协议的枚举来构建错误状态:

enum VendingMachineError: Error {
case invalidSelection //选择无效 

case insufficientFunds(coinsNeeded: Int) //金额不足 

case outOfStock //缺货 

 } 




2.处理错误 

Swift 中有 4 种处理错误的方式:

你可以把函数抛出的错误传递给调用此函数的代码;

do-catch语句处理错 误;

将错误作为可选类型处理;

或者断言此错误根本不会发生。 



throwing函数传递错误 

为了表示一个函数、方法或构造器可以抛出错误,在函数声明的参数列表之后加上 throws关键字。一个标有 ows关键字的函数被称作throwing函数。如果这个函数指明了返回值类型, throws关键词需要写在箭头( - >)的前面。

func canThrowErrors() throws -> String

//实际使用     

func vend(itemNamed name: String) throws {

         guard item.count > 0 else {

             throw VendingMachineError.OutOfStock

self.someMethed()

}


Do-Catch处理错误 

可以使用一个 do-catch 语句运行一段闭包代码来处理错误。如果在 do子句中的代码抛出了一个错误,这个错误会与 catch 子句做匹配,从而决定哪条子句能处理它。 

do {

     try expression

     statements

 } catch pattern 1 {

     statements

 } catch pattern 2 where condition {

statements 

 } 


将错误转换成可选值 

可以使用 try? 通过将错误转换成一个可选值来处理错误。

如果在评估 try? 表达式时一个错误被抛出,那么表达式的值就是 nil 

let x = try? someThrowingFunction()



禁用错误传递 

有时你知道某个 throwing 函数实际上在运行时是不会抛出错误的,在这种情况下,你可以在表达式前面写 try!来禁用错误传递。





3.指定清理操作 

可以使用 defer 语句在即将离开当前代码块时执行一系列语句。该语句让你能执行一些必要的清理工作,无论是由于抛出错误而离开,还是由于诸如 return或者 break 的语句。

第一条 defer 语句中的代码会在第二条 defer语句中的 代码被执行之后才执行,以此类推。 















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值