diff --git a/source/chapter2/07_Closures.md b/source/chapter2/07_Closures.md index 72f7020c..7af7e57f 100644 --- a/source/chapter2/07_Closures.md +++ b/source/chapter2/07_Closures.md @@ -12,11 +12,11 @@ 闭包是功能性自包含模块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C 中的`blocks`以及其他一些编程语言中的`lambdas`比较相似。 -闭包可以 **捕获** 和存储其所在上下文中任意常量和变量的引用。 -这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。Swift 会为您管理在 **捕获** 过程中涉及到的内存操作。 +闭包可以**捕获**和存储其所在上下文中任意常量和变量的引用。 +这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。Swift 会为您管理在**捕获**过程中涉及到的内存操作。 > 注意: -> 如果您不熟悉 **捕获** (capturing) 这个概念也不用担心,后面会详细对其进行介绍。 +> 如果您不熟悉**捕获**(capturing) 这个概念也不用担心,后面会详细对其进行介绍。 在`函数`章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: @@ -118,7 +118,7 @@ reversed = sort(names, { (s1: String, s2: String) -> Bool in return s1 > s2 } ) 因为排序闭包是作为函数的参数进行传入的,Swift可以推断其参数和返回值的类型。 `sort`期望第二个参数是类型为`(String, String) -> Bool`的函数,因此实际上`String`,`String`和`Bool`类型并不需要作为闭包表达式定义中的一部分。 -因为所有的类型都可以被正确推断,返回箭头 (->) 和 围绕在参数周围的括号也可以被省略: +因为所有的类型都可以被正确推断,返回箭头 (`->`) 和围绕在参数周围的括号也可以被省略: ``` reversed = sort(names, { s1, s2 in return s1 > s2 } ) @@ -169,6 +169,8 @@ reversed = sort(names, >) ### Trailing 闭包 +--- + 如果您需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用 trailing 闭包来增强函数的可读性。 Trailing 闭包是一个书写在函数括号之外(之后)的闭包表达式,函数支持将其作为最后一个参数调用。 @@ -264,6 +266,8 @@ let strings = numbers.map { ### 捕获 (Caputure) 值 +--- + 闭包可以在其定义的上下文中捕获常量或变量。 即使定义这些常量和变量的原域已经不存在,闭包仍然可以在闭包函数体内引用和修改这些值。 @@ -355,6 +359,8 @@ incrementByTen() ### 闭包是引用类型 +--- + 上面的例子中,`incrementBySeven`和`incrementByTen`是常量,但是这些常量指向的闭包仍然可以增加其捕获的变量值。 这是因为函数和闭包都是引用类型。