无标题文章

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 ({

})

你可能感兴趣的:(无标题文章)