import Cocoa
/*//闭包表达式语法
{ (parameters) -> returnTyoe in
statements
}
*/
//原始版本
func backwards(s1: String, s2: String) -> Bool {
return s1 > s2
}
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var reversed = names.sort(backwards)
//闭包表达式写法
var newReversed = names.sort({ (s1: String, s2: String) -> Bool in return s1 > s2 })
newReversed
//上下文推断类型简写
var contextReversed = names.sort( { s1, s2 in return s1 > s2 })
contextReversed
//单表达式闭包隐式返回
var singleExpressionRevered = names.sort( { s1, s2 in s1 > s2 })
singleExpressionRevered
//参数名称缩写:Swift 自动为内联函数提供了参数名称缩写功能,您可以直接通过$0,$1,$2来顺序调用闭包的参数。如果您在闭包表达式中使用参数名称缩写,您可以在闭包参数列表中省略对其的定义,并且对应参数名称缩写的类型会通过函数类型进行推断。 in关键字也同样可以被省略
var shorthandArgumentNames = names.sort( { $0 > $1 })
//如果函数只需要闭包表达式一个参数,当您使用尾随闭包时,您甚至可以把()省略掉。
var oneParam = names.sort(){ $0 > $1 }
shorthandArgumentNames
//运算符函数: Swift 的String类型定义了关于大于号 (>) 的字符串实现,其作为一个函数接受两个String类型的参数并返回Bool类型的值。 而这正好与sort(_:)方法的第二个参数需要的函数类型相符合。 因此,您可以简单地传递一个大于号,Swift可以自动推断出您想使用大于号的字符串函数实现:
var operatorFunctions = names.sort(>)
//尾随闭包:如果您需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性。 尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。
func someFunctionThat(closure: () -> Void) {
}
//不使用尾随闭包进行调用
someFunctionThat ({
})