01-闭包表达式的基本操作
let 城市列表 = [
"Beijing",
"Shanghai",
"Shenzhen",
"New York"
]
func 排序(s1: String, s2: String) ->Bool {
return (s1 < s2)
}
// sorted函数
var 城市列表2 = sorted(城市列表, 排序)
// 闭包表达式
var 城市列表3 = sorted(城市列表, {
(s1: String, s2: String) ->Bool in
return (s1 < s2)
})
// 闭包表达式参数的类型推断
var 城市列表4 = sorted(城市列表, {
(s1, s2) ->Bool in
return (s1 < s2)
})
// 闭包表达式的间接返回
var 城市列表5 = sorted(城市列表, {
(s1, s2) ->Bool in (s1 < s2)
})
// 闭包表达式参数简写
var 城市列表6 = sorted(城市列表, {
($0 < $1)
})
// 操作符函数
var 城市列表7 = sorted(城市列表, <)
02-挂尾闭包
let 数字字典 = [
0: "Zero",
1: "One",
2: "Two",
3: "Three",
4: "Four",
5: "Five",
6: "Six",
7: "Seven",
8: "Eight",
9: "Nine"
]
let 数字数组 = [16, 587, 15764]
// 挂尾闭包
数字数组.map() {
(var 数字) ->String in
var 输出字符串 = ""
while (数字 > 0) {
输出字符串 = 数字字典[数字 % 10]! + 输出字符串
数字 /= 10
}
return 输出字符串
}
03-闭包的值捕获
func 累加器(#增量: Int) -> () ->Int {
var 总和 = 0
func 累加() ->Int {
// 闭包的值捕获是引用
总和 += 增量
return 总和
}
return 累加
}
let a = 累加器(增量: 5)
a()
a()
a()
let b = 累加器(增量: 3)
b()
b()
b()