闭包 ≈
block, 函数, 匿名函数 (闭包和函数都是引用类型,能改变值
)
(值类型不能改变值
)
// 生成一个随机的数组
let value = arc4random()%1000
var array: [Int] = []
for _ in 0..<10 {
let value = Int(arc4random()%1000)
array.append(value)
}
// 自定义排序
func approach (num1: Int, num2: Int) -> Bool
{
return abs(Int32(num1 - 500)) < abs(Int32(num2 - 500))
}
// 传入排序函数
array.sort(by: approach)
对上面的传的函数进行改造, 传入闭包(匿名函数)
// 这里的逻辑处理和上面的效果一样
array.sort(by: {(num1: Int, num2: Int) -> Bool in
return abs(Int32(num1 - 500)) < abs(Int32(num2 - 500))
})
闭包简化
array.sort(by:{(a: Int, b: Int) -> Bool in
return a > b
})
array.sort(by:{(a: Int, b: Int) -> Bool in return a > b})
array.sort(by:{a, b in return a > b})
array.sort(by:{a, b in a > b})
array.sort(by:{$0 > $1})
array.sort(by:>)
结尾闭包
结尾闭包是一个函数要传入的参数的最后一个参数的时候, 闭包可以提到()外面去, 相应的参数也就没有意义,可以省略
()
可以不包含闭包内容, 也可以省略
array.sort(){a, b in return a > b}
array.sort{a, b in return a > b}
内容捕获
捕获到闭包外面的 num 值,函数无法实现捕获
var num = 500
array.sort(by:{(a: Int, b: Int) -> Bool in
return abs(Int32(a - num)) < abs(Int32(b - num))
})
网友评论