函数实际上是闭包的特殊情况,闭包无需名称,放到大括号内即可。
使用in 到特定参数和主体的返回值。
{(parameters)->return type in
statements
}
内置sorted ,例:
let numbers=[1,6,7,0,2,4,3]
func numberSort(n1:Int,n2:Int)->bool{
return n1>n2
}
var newNumbers=sorted(numbers,numberSort)
sorted改成闭包的形式,
var newNumbers2=sorted(numbers,{
(n1:Int,n2:Int)->Bool in
return n1>n2
})
看到形式其实就是函数,只不过闭包没有名称了对比一下,就可以看出来了。
func 函数 (n1:Int,n2:Int)->Bool {
return n1>n2
}
下面的是闭包形式,
{
(n1:Int,n2:Int)->Bool in
return n1>n2
}
进一步优化,使用推断,根据传递过来的数据,推断类型,故可以去掉参数类型,如
var newNumbers3=sorted(numbers,{
(n1,n2)->Bool in
return n1>n2
})
闭包省去return,如
var newNumbers4=sorted(numbers,{
(n1,n2)->Bool inn1>n2
})
参数简写,简写参数用$符号,如
var newNumbers5=sorted(numbers,{
$0>$1
})
进一步简写,操作符本身是个函数,故只需要写出操作符即可
var newNumbers6=sorted(numbers,>)