1. 基本用法
import Foundation
var arr = [3, 1, 4, 5, 2]
arr.sort(by: { // 一定要加by
(a: Int, b: Int) -> Bool in
return a > b
})
arr.sort(by:{
a, b in
return a > b
})
arr.sort(by:{
a, b in
a > b
})
arr.sort(by:{
a, b in
a > b
})
arr.sort(by:{$0 > $1})
arr.sort(by: >)
arr
2. 结尾闭包
import Foundation
var arr = [3, 1, 4, 5, 2]
// 当sort传入的参数的最后一个时闭包的时候,就可以把闭包拿出来
arr.sort(){
a, b in return a > b
}
// 当只有结尾闭包一个参数的时候小括号可以省略
arr.sort{
a, b in return a > b
}
arr
// 转成二进制
arr.map() { // map函数不改变arr,因此执行结束之后还是原来的,这里的()可以省略
(num: Int) -> String in
var res = ""
var num = num
repeat {
res = String(num % 2) + res
num /= 2
} while num != 0
return res
}
3. 内容捕获,闭包内的变量可以来自外界
import Foundation
var arr = [3, 1, 4, 5, 2]
var num = 0
arr.sort{ // 谁离num更近?由于num可能是个变量,因此需要进行内容捕获
abs($0 - num) < abs($1 - num)
}
4. 闭包和函数都是引用类型
import Foundation
func run(_ step: Int) -> () -> Int {
var total = 0
return { // 返回的是一个闭包
total += step
return total
}
}
var planA = run(1000)
planA() // 1000
planA() // 2000
planA() // 3000
var planB = run(2000)
planB() // 2000
planB() // 4000
planB() // 6000
let planC = planB
planC() // 8000
planB() // 10000