- 闭包(Closure)在本质上等于函数,和oc的block类似
- 闭包是一种函数的简写形式,省去函数名,把参数和返回值放入{}内。
//语法
{(parameters) -> (return type) in
statements
}
闭包的基本演示:
let studname = { print("Swift 闭包实例。") }
studname()
var numArray = [1,3,5,6,7,0]
//sorter函数用于对数组的排序,只接受一个函数型参数,描述排序逻辑
//正序
var numArray1 = numArray.sorted()
func daoxu1(a:Int,b:Int) -> Bool {
return a > b
}
var numArray2 = numArray.sorted(by: daoxu1)
//用闭包表达式
var numArray3 = numArray.sorted { (a, b) -> Bool in
return a > b
}
numArray3
//闭包的自动推断
//可使用快捷参数,前缀$,从0开始递增
var numArray4 = numArray.sorted { $0 > $1}
numArray4
参数名称缩写:
Swift 自动为内联函数提供了参数名称缩写功能,您可以直接通过1,$2来顺序调用闭包的参数。
如果你在闭包表达式中使用参数名称缩写, 您可以在闭包参数列表中省略对其定义, 并且对应参数名称缩写的类型会通过函数类型进行推断。in 关键字同样也可以被省略.
var numArray = [1,3,5,6,7,0]
var numArray4 = numArray.sorted { $0 > $1}
print(numArray4)
运算符函数
Swift 的String类型定义了关于大于号 (>) 的字符串实现,其作为一个函数接受两个String类型的参数并返回Bool类型的值。 而这正好与sort(_:)方法的第二个参数需要的函数类型相符合。 因此,您可以简单地传递一个大于号,Swift可以自动推断出您想使用大于号的字符串函数实现:
let names = ["AT", "AE", "D", "S", "BE"]
var reversed = names.sorted(by: >)
print(reversed)
尾随闭包
尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。
func someFunctionThatTakesAClosure(closure: () -> Void) {
// 函数体部分
}
// 以下是不使用尾随闭包进行函数调用
someFunctionThatTakesAClosure({
// 闭包主体部分
})
// 以下是使用尾随闭包进行函数调用
someFunctionThatTakesAClosure() {
// 闭包主体部分
}
let names = ["AT", "AE", "D", "S", "BE"]
//尾随闭包---sorted() 后的 { $0 > $1} 为尾随闭包。
var reversed = names.sorted() { $0 > $1 }
print(reversed)