From 5e33251e5d9f7c6d4505456f9f75dc7a25975b9b Mon Sep 17 00:00:00 2001 From: 100mango <100mango@users.noreply.github.com> Date: Sun, 28 Jun 2015 13:45:37 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E8=AE=A2Inferring=20Type=20From?= =?UTF-8?q?=20Context?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.修订sort方法 2.增加未翻译部分 --- source/chapter2/07_Closures.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/chapter2/07_Closures.md b/source/chapter2/07_Closures.md index 093a113d..da022838 100755 --- a/source/chapter2/07_Closures.md +++ b/source/chapter2/07_Closures.md @@ -122,16 +122,18 @@ reversed = sorted(names, { (s1: String, s2: String) -> Bool in return s1 > s2 } ### 根据上下文推断类型(Inferring Type From Context) -因为排序闭包函数是作为`sorted`函数的参数进行传入的,Swift可以推断其参数和返回值的类型。 +因为排序闭包函数是作为`sort(_:)`方法的参数进行传入的,Swift可以推断其参数和返回值的类型。 `sorted`期望第二个参数是类型为`(String, String) -> Bool`的函数,因此实际上`String`,`String`和`Bool`类型并不需要作为闭包表达式定义中的一部分。 因为所有的类型都可以被正确推断,返回箭头 (`->`) 和围绕在参数周围的括号也可以被省略: ```swift -reversed = sorted(names, { s1, s2 in return s1 > s2 } ) +reversed = names.sort( { s1, s2 in return s1 > s2 } ) ``` 实际上任何情况下,通过内联闭包表达式构造的闭包作为参数传递给函数时,都可以推断出闭包的参数和返回值类型,这意味着您几乎不需要利用完整格式构造任何内联闭包。 +然而您仍然可以明确写出有着完整格式的闭包。如果完整格式的闭包能够提高代码的可读性我,我们建议采取这种形式。而在`sort(_:)`方法这个例子里,闭包的目的就是排序,读者能够推测除这个闭包是用于字符串处理的,因为这个闭包是为了处理字符串数组的排序。 + ### 单表达式闭包隐式返回(Implicit Return From Single-Expression Clossures) From 56a3be66b2039d2b0ae8cad791ec7aa39a2b4eec Mon Sep 17 00:00:00 2001 From: 100mango <100mango@users.noreply.github.com> Date: Sun, 28 Jun 2015 13:51:07 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9Inferring=20Type=20From?= =?UTF-8?q?=20Context?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/chapter2/07_Closures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/chapter2/07_Closures.md b/source/chapter2/07_Closures.md index da022838..806f321e 100755 --- a/source/chapter2/07_Closures.md +++ b/source/chapter2/07_Closures.md @@ -132,7 +132,7 @@ reversed = names.sort( { s1, s2 in return s1 > s2 } ) 实际上任何情况下,通过内联闭包表达式构造的闭包作为参数传递给函数时,都可以推断出闭包的参数和返回值类型,这意味着您几乎不需要利用完整格式构造任何内联闭包。 -然而您仍然可以明确写出有着完整格式的闭包。如果完整格式的闭包能够提高代码的可读性我,我们建议采取这种形式。而在`sort(_:)`方法这个例子里,闭包的目的就是排序,读者能够推测除这个闭包是用于字符串处理的,因为这个闭包是为了处理字符串数组的排序。 +然而您仍然可以明确写出有着完整格式的闭包。如果完整格式的闭包能够提高代码的可读性,则可以采用完整格式的闭包。而在`sort(_:)`方法这个例子里,闭包的目的就是排序,读者能够推测除这个闭包是用于字符串处理的,因为这个闭包是为了处理字符串数组的排序。 ### 单表达式闭包隐式返回(Implicit Return From Single-Expression Clossures) From 359d9acb94c95d8ccb9262be90e83a02e160018c Mon Sep 17 00:00:00 2001 From: 100mango <100mango@users.noreply.github.com> Date: Sun, 28 Jun 2015 14:05:44 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E8=AE=A2Implicit=20Return=20From?= =?UTF-8?q?=20Single-Expression=20Clossures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/chapter2/07_Closures.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/chapter2/07_Closures.md b/source/chapter2/07_Closures.md index 806f321e..f3324d16 100755 --- a/source/chapter2/07_Closures.md +++ b/source/chapter2/07_Closures.md @@ -140,10 +140,10 @@ reversed = names.sort( { s1, s2 in return s1 > s2 } ) 单行表达式闭包可以通过隐藏`return`关键字来隐式返回单行表达式的结果,如上版本的例子可以改写为: ```swift -reversed = sorted(names, { s1, s2 in s1 > s2 } ) +reversed = names.sort( { s1, s2 in s1 > s2 } ) ``` -在这个例子中,`sorted`函数的第二个参数函数类型明确了闭包必须返回一个`Bool`类型值。 +在这个例子中,`sort(_:)`方法的第二个参数函数类型明确了闭包必须返回一个`Bool`类型值。 因为闭包函数体只包含了一个单一表达式 (`s1 > s2`),该表达式返回`Bool`类型值,因此这里没有歧义,`return`关键字可以省略。 From cf51cad41a96f6f868d39394ddbdcfb4fdcf15cc Mon Sep 17 00:00:00 2001 From: 100mango <100mango@users.noreply.github.com> Date: Sun, 28 Jun 2015 14:26:25 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E8=AE=A2sorted,()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.sorted -> sort 2.() -> Void --- source/chapter2/07_Closures.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/chapter2/07_Closures.md b/source/chapter2/07_Closures.md index f3324d16..7f7969de 100755 --- a/source/chapter2/07_Closures.md +++ b/source/chapter2/07_Closures.md @@ -155,7 +155,7 @@ Swift 自动为内联函数提供了参数名称缩写功能,您可以直接 `in`关键字也同样可以被省略,因为此时闭包表达式完全由闭包函数体构成: ```swift -reversed = sorted(names, { $0 > $1 } ) +reversed = names.sort( { $0 > $1 } ) ``` 在这个例子中,`$0`和`$1`表示闭包中第一个和第二个`String`类型的参数。 @@ -165,11 +165,11 @@ reversed = sorted(names, { $0 > $1 } ) 实际上还有一种更简短的方式来撰写上面例子中的闭包表达式。 Swift 的`String`类型定义了关于大于号 (`>`) 的字符串实现,其作为一个函数接受两个`String`类型的参数并返回`Bool`类型的值。 -而这正好与`sorted`函数的第二个参数需要的函数类型相符合。 +而这正好与`sort(_:)`方法的第二个参数需要的函数类型相符合。 因此,您可以简单地传递一个大于号,Swift可以自动推断出您想使用大于号的字符串函数实现: ```swift -reversed = sorted(names, >) +reversed = names.sort(>) ``` 更多关于运算符表达式的内容请查看 [运算符函数](../chapter2/24_Advanced_Operators.html#operator_functions)。 @@ -182,7 +182,7 @@ reversed = sorted(names, >) 尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。 ```swift -func someFunctionThatTakesAClosure(closure: () -> ()) { +func someFunctionThatTakesAClosure(closure: () -> Void) { // 函数体部分 } @@ -203,7 +203,7 @@ someFunctionThatTakesAClosure() { 在上例中作为`sorted`函数参数的字符串排序闭包可以改写为: ```swift -reversed = sorted(names) { $0 > $1 } +reversed = names.sort() { $0 > $1 } ``` 当闭包非常长以至于不能在一行中进行书写时,尾随闭包变得非常有用。 @@ -283,7 +283,7 @@ Swift最简单的闭包形式是嵌套函数,也就是定义在其他函数的 每次调用`incrementor`时,其会以`amount`作为增量增加`runningTotal`的值。 ```swift -func makeIncrementor(forIncrement amount: Int) -> () -> Int { +func makeIncrementor(forIncrement amount: Int) -> Void -> Int { var runningTotal = 0 func incrementor() -> Int { runningTotal += amount @@ -293,7 +293,7 @@ func makeIncrementor(forIncrement amount: Int) -> () -> Int { } ``` -`makeIncrementor`返回类型为`() -> Int`。 +`makeIncrementor`返回类型为`Void -> Int`。 这意味着其返回的是一个函数,而不是一个简单类型值。 该函数在每次调用时不接受参数只返回一个`Int`类型的值。 关于函数返回其他函数的内容,请查看[函数类型作为返回类型](../chapter2/06_Functions.html#function_types_as_return_types)。