diff --git a/source/chapter2/18_Error_Handling.md b/source/chapter2/18_Error_Handling.md index b0034757..9b09c991 100755 --- a/source/chapter2/18_Error_Handling.md +++ b/source/chapter2/18_Error_Handling.md @@ -12,6 +12,9 @@ > 翻译+校对:[shanks](http://codebuild.me) 2016-09-24 > 3.0.1,shanks,2016-11-13 +> 4.0 +> 校对:[kemchenj](https://kemchenj.github.io/) 2017-09-21 + 本页包含内容: - [表示并抛出错误](#representing_and_throwing_errors) @@ -231,9 +234,9 @@ let photo = try! loadImage(atPath: "./Resources/John Appleseed.jpg") ## 指定清理操作 -可以使用`defer`语句在即将离开当前代码块时执行一系列语句。该语句让你能执行一些必要的清理工作,不管是以何种方式离开当前代码块的——无论是由于抛出错误而离开,还是由于诸如`return`或者`break`的语句。例如,你可以用`defer`语句来确保文件描述符得以关闭,以及手动分配的内存得以释放。 +可以使用`defer`语句在即将离开当前代码块时执行一系列语句。该语句让你能执行一些必要的清理工作,不管是以何种方式离开当前代码块的——无论是由于抛出错误而离开,或是由于诸如`return`、`break`的语句。例如,你可以用`defer`语句来确保文件描述符得以关闭,以及手动分配的内存得以释放。 -`defer`语句将代码的执行延迟到当前的作用域退出之前。该语句由`defer`关键字和要被延迟执行的语句组成。延迟执行的语句不能包含任何控制转移语句,例如`break`或是`return`语句,或是抛出一个错误。延迟执行的操作会按照它们被指定时的顺序的相反顺序执行——也就是说,第一条`defer`语句中的代码会在第二条`defer`语句中的代码被执行之后才执行,以此类推。 +`defer`语句将代码的执行延迟到当前的作用域退出之前。该语句由`defer`关键字和要被延迟执行的语句组成。延迟执行的语句不能包含任何控制转移语句,例如`break`、`return`语句,或是抛出一个错误。延迟执行的操作会按照它们声明的顺序从后往前执行——也就是说,第一条`defer`语句中的代码最后才执行,第二条`defer`语句中的代码倒数第二个执行,以此类推。最后一条语句会第一个执行 ```swift func processFile(filename: String) throws { @@ -254,3 +257,5 @@ func processFile(filename: String) throws { > 注意 > 即使没有涉及到错误处理,你也可以使用`defer`语句。 + +