diff --git a/source/chapter2/07_Closures.md b/source/chapter2/07_Closures.md index 15658a18..5ef50c2a 100644 --- a/source/chapter2/07_Closures.md +++ b/source/chapter2/07_Closures.md @@ -1,5 +1,7 @@ # 闭包 +---- + 本页内容包含: - 闭包表达式 @@ -30,8 +32,11 @@ Swift 的闭包表达式拥有简洁的风格,并鼓励在常见场景中进 * 参数名称缩写 * Trailing 闭包语法 + ### 闭包表达式 +--- + 嵌套函数是一个在较复杂函数中方便进行命名和定义自包含代码模块的方式。 当然,有时候撰写小巧的没有完整定义和命名的类函数结构也是很有用处的,尤其是在您处理一些函数并需要将另外一些函数作为该函数的参数时。 @@ -156,6 +161,7 @@ reversed = sort(names, >) 更多关于运算符表达式的内容请查看 [Operator Functions](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html#//apple_ref/doc/uid/TP40014097-CH27-XID_43) 。 + ### Trailing 闭包 如果您需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用 trailing 闭包来增强函数的可读性。 @@ -252,7 +258,8 @@ let strings = numbers.map { 上例中 trailing 闭包语法在函数后整洁封装了具体的闭包功能,而不再需要将整个闭包包裹在 `map` 函数的括号内。 -### 捕获 (Caputure) + +### 捕获 (Caputure) 值 闭包可以在其定义的上下文中捕获常量或变量。 即使定义这些常量和变量的原域已经不存在,闭包仍然可以在闭包函数体内引用和修改这些值。 @@ -344,6 +351,7 @@ incrementByTen() > 如果您闭包分配给一个类实例的属性,并且该闭包通过指向该实例或其成员来捕获了该实例,您将创建一个在闭包和实例间的强引用环。 > Swift 使用捕获列表来打破这种强引用环。更多信息,请参考 [Strong Reference Cycles for Closures](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-XID_61)。 + ### 闭包是引用类型 上面的例子中,`incrementBySeven` 和 `incrementByTen` 是常量,但是这些常量指向的闭包仍然可以增加其捕获的变量值。