Swift 里错误处理

本文详细介绍了Swift中的错误处理机制,包括如何表示和抛出错误,使用`throwing`函数传递错误,通过`Do-Catch`处理错误,将错误转换为可选值,禁用错误传递以及使用`defer`进行清理操作。错误处理在Swift中通过遵循`Error`协议的枚举类型实现,`throw`关键字用于标记可抛出错误的函数,`try`用于调用这些函数,`defer`确保代码块结束前执行特定操作。
摘要由CSDN通过智能技术生成

目录

表示与抛出错误

处理错误

throwing函数传递错误(通过throw关键字标明,在函数返回值->前)

用 Do-Catch 处理错误

将错误转换成可选值 (有返回值的throwing函数,try?解析为可选型

禁用错误传递 (try! 来禁用错误传递)

指定清理操作 (defer 语句来做离开当前代码块的清理操作)

总结


错误处理(Error handling) 是响应错误以及从错误中恢复的过程。Swift 在运行时提供了抛出、捕获、传递和操作可恢复错误(recoverable errors)的一等支持(first-class support)

表示与抛出错误

 Swift中错误用遵循 Error协议的类型的值来表示。这个空协议表明该类型可以用于错误处理。

Swift的枚举类型适合构建一组相关的错误状态,枚举关联值还可以提供错误状态的额外信息

游戏中操作自动贩卖机
enum VendingMachineError: Error { 遵循Error并非继承,enum没有继承,
    case invalidSelection                     //选择无效
    case insufficientFunds(coinsNeeded: Int) //金额不足
    case outOfStock                             //缺货
}

抛出一个错误表明有意外情况发生,导致正常的执行流程无法继续执行。抛出错误使用 throw 语句
throw VendingMachineError.insufficientFunds(coinsNeeded: 5)

处理错误

某个错误被抛出时,附近的某部分代码必须负责处理这个错误,例如纠正这个问题、尝试另外一种方式、或是向用户报告错误

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

1、把函数抛出的错误传递给调用此函数的代码、

2、用 do-catch 语句处理错误、

3、将错误作为可选类型处理、

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

当一个函数抛出一个错误时,程序流程会发生改变,你能迅速识别代码中会抛出错误的地方。在调用一个能抛出错误的函数、方法或者构造器之前,加上 try 关键字,或者 try? 或 try! 

Swift 中的错误处理和其他语言中用 trycatch 和 throw 进行异常处理很像。和其他语言中(包括 Objective-C )的异常处理不同的是,Swift 中的错误处理并不涉及解除调用栈,这是一个计算代价高昂的过程。就此而言,throw 语句的性能特性是可以和 return 语句相媲美的。

throwing函数传递错误(通过throw关键字标明,在函数返回值->前)

为了表示一个函数、方法或构造器可以抛出错误,在函数声明的参数之后加上 throws 关键字。一个标有 throws 关键字的函数被称作 throwing 函数

func canThrowErrors() throws -> String

func cannotThrowErrors() -> String

throwing 函数可以在其内部抛出错误,并将错误传递到函数被调用时的作用域。

只有 throwing函数可以传递错误。任何在非 throwing 函数内部抛出的错误只能在函数内部处理。

struct Item {
    var price: Int
    var count: Int
}

如果请求的物品不存在、缺货或者投入金额小于物品价格,该方法就会抛出一个相应的 VendingMachineError
class VendingMachine {
    var inventory = [
        "Candy Bar": Item(price: 12, count: 7),
        "Chips&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值