|
2 | 2 |
|
3 | 3 | 响应错误并从错误中恢复。
|
4 | 4 |
|
5 |
| -*错误处理(Error handling)* 是对程序中的错误条件做出响应并从中恢复的过程。Swift 为在运行时抛出、捕获、传递和处理可恢复错误提供了一等支持。 |
| 5 | +**错误处理(Error handling)** 是对程序中的错误条件做出响应并从中恢复的过程。Swift 为在运行时抛出、捕获、传递和处理可恢复错误提供了一等支持。 |
6 | 6 |
|
7 |
| -有些操作并不能保证总是能执行完成或生成有用的结果。可选项用于表示值缺失,但当操作失败时,理解造成失败的原因有助于你的代码作出相应的应对。 |
| 7 | +有些操作并不能保证总是能执行完成或生成有用的结果。可选类型用于表示值缺失,但当操作失败时,了解造成失败的原因有助于你的代码作出相应的应对。 |
8 | 8 |
|
9 | 9 | 以从磁盘文件读取和处理数据为例。该任务失败的原因有很多,包括指定路径下的文件不存在、文件没有读取权限或文件编码格式不兼容。通过区分这些不同的失败情况来让程序处理和解决一些错误,并将无法解决的错误告知用户。
|
10 | 10 |
|
|
16 | 16 |
|
17 | 17 | 在 Swift 中,错误由遵循 Error 协议的类型值表示。这个空协议表示一种类型可用于错误处理。
|
18 | 18 |
|
19 |
| -Swift 枚举特别适用于对一组相关的错误条件,枚举的关联值还可以提供错误状态的额外信息。例如,您可以用以下方式表示在游戏中操作自动售货机的错误条件: |
| 19 | +Swift 枚举特别适用于一组相关的错误条件,枚举的关联值还可以提供错误状态的额外信息。例如,您可以用以下方式表示在游戏中操作自动售货机的错误条件: |
20 | 20 |
|
21 | 21 | ```swift
|
22 | 22 | enum VendingMachineError: Error {
|
@@ -70,7 +70,7 @@ throw VendingMachineError.insufficientFunds(coinsNeeded: 5)
|
70 | 70 |
|
71 | 71 | ### 用抛错函数传递错误
|
72 | 72 |
|
73 |
| -为了表示函数、方法或构造器可以抛出错误,您可以在函数声明中的参数后写入 `throws` 关键字。标有 `throws` 的函数称为 *抛错函数(throwing function)*。如果该函数指定了返回类型,则应在返回箭头(`->`)之前写入 `throws` 关键字。 |
| 73 | +为了表示函数、方法或构造器可以抛出错误,您可以在函数声明中的参数后写入 `throws` 关键字。标有 `throws` 的函数称为 **抛错函数(throwing function)**。如果该函数指定了返回类型,则应在返回箭头(`->`)之前写入 `throws` 关键字。 |
74 | 74 |
|
75 | 75 | <!--
|
76 | 76 | TODO Add discussion of throwing initializers
|
|
383 | 383 | 如果抛出错误,执行将立即转移到 `catch` 子句,由其决定是否继续传递。如果错误没有被匹配,它将被最后的 `catch` 子句捕获,并绑定到本地 `error` 常量。
|
384 | 384 | 如果没有错误抛出,则执行 `do` 语句中的其余语句。
|
385 | 385 |
|
386 |
| -`catch` 子句不必处理 `do` 子句中的代码可能抛出的所有错误。如果没有 `catch` 子句处理错误,则错误会传播到周围的作用域。但是,传播的错误必须由 *某个* 周围作用域处理。 |
| 386 | +`catch` 子句不必处理 `do` 子句中的代码可能抛出的所有错误。如果没有 `catch` 子句处理错误,则错误会传播到周围的作用域。但是,传播的错误必须由 **某个** 周围作用域处理。 |
387 | 387 | 在非抛错函数中, `do`-`catch` 语句必须处理错误。在抛错函数中,必须由 `do`-`catch` 语句或调用者处理错误。如果错误传递到了顶层作用域却依然没有被处理,则会出现运行时错误。
|
388 | 388 |
|
389 | 389 | 例如,在编写上述示例时,只要不是 `VendingMachineError` 中声明的错误,都会被调用函数捕获:
|
@@ -601,7 +601,7 @@ enum StatisticsError: Error {
|
601 | 601 |
|
602 | 602 | 要指定函数只抛出 `StatisticsError` 值作为其错误,
|
603 | 603 | 您可以在声明函数时写入 `throws(StatisticsError)` 而不是 `throws` 。
|
604 |
| -这种语法也被称为 *指定类型抛错(typed throws)*,因为您在声明中的 `throws` 后面指定了错误类型。 |
| 604 | +这种语法也被称为 **指定类型抛错(typed throws)**,因为您在声明中的 `throws` 后面指定了错误类型。 |
605 | 605 | 例如,下面的函数抛出 `StatisticsError` 值作为其错误。
|
606 | 606 |
|
607 | 607 | ```swift
|
|
0 commit comments