闭包的本质是一个函数
闭包 与 OC中的Block相似
来看这样一段代码
var arr:[Int] = []
for _ in 0..<100{
arr.append(random()%1000)
}
func biggerNumberFirst(a:Int , _ b:Int) -> Bool{
return a > b
}
arr.sort(biggerNumberFirst)
使用闭包
arr.sort({
(a:Int , b:Int) -> Bool in
return a > b
})
闭包的化简
并不一定非要去使用最简单的写法,有时候会失去程序的可读性,我们要在代码的简洁性和易读性找到一个平衡点
1.复杂的闭包最好还是清楚的写出变量名 和返回值类型
arr.sort({(a:Int , b:Int) -> Bool in return a > b})
2.简单的闭包就使用此种
arr.sort({ a , b in return a > b})
3
arr.sort({ a , b in a > b})
4 如果没有给变量命名 swift自动命名变量名 $0 $1 $2....类型肯定是Int(因为sort函数的参数是Int类型)返回值一定是Bool型
arr.sort({ $0 > $1})
5 >(大于号) 本身就是一个函数
arr.sort(>)
结尾闭包
如果函数是作为最后一个参数,那么就可以使用结尾闭包
arr.sort(){(a:Int , b:Int) -> Bool in return a > b}
一般这样写易读性较强
arr.sort(){(a:Int , b:Int) -> Bool in
return a > b
}