闭包(closure)是一种更加紧凑,轻量的匿名函数,类似于Java中的lambda表达式
swift中的闭包语法如下
{(parameters)->returnType in
...
}
接下来我们看一段数组排序代码, 该代码将函数sortAsc当做参数传递
let counts=[1,10,6,2,50,8,24]
func sortAsc(n1:Int,n2:Int)->Bool
{
return n1<n2
}
//[1, 2, 6, 8, 10, 24, 50]
print(counts.sorted(by: sortAsc))
由于闭包也是函数的一种,所以我们可以使用闭包语法修改上面的代码
let counts=[1,10,6,2,50,8,24]
print(counts.sorted(by: {
(n1:Int,n2:Int) -> Bool in
return n1<n2
}))
闭包可以利用swift的类型推断系统,所以我们可以省略类型信息
由于return n1<n2会返回Bool,所以返回值类型可以省略
由于这里只有一个表达式return n1<n2,所以return语句可以省略
let counts=[1,10,6,2,50,8,24]
print(counts.sorted(by: {n1,n2 in n1<n2}))
使用快捷参数名省略参数命名和in,其中1代表第二个参数,依此类推
let counts=[1,10,6,2,50,8,24]
print(counts.sorted(by: {$0<$1}))
如果闭包是函数的唯一参数,则可以省略圆括号以及参数名
let counts=[1,10,6,2,50,8,24]
print(counts.sorted{$0<$1})
网友评论