func another(addition: (Int, Int) -> Int, a: Int, b: Int) { //
函数类型作为参数类型
print("输出结果: \(addition(a, b))")
}
another(addition: sum, a: 10, b: 20)
func stepForward(a: Int, b: String) -> String {
let str = a
return String(str)
}
func stepBackForward(b: Int, a: String) -> String {
let str = b
return String(str)
}
func chooseStepFunction(isBack: Bool) -> (Int, String) -> String { //
函数类型作为返回类型
return isBack ? stepForward : stepBackForward
}
print(chooseStepFunction(isBack: true))
func calcDecrement(forDecrement total: Int) -> () -> Int {
var overallDecrement = 0
func decrementer() -> Int {
overallDecrement += total
// func de() -> Int {
// return 2
// }
return overallDecrement //de()
}
return decrementer
}
let decrem = calcDecrement(forDecrement: 30)
print(decrem())
返回值是⼀个()-> Int的函数。
函数题内,声明了变量overallDecrement 和⼀个函数decrementer。decrementer函数并没有获取任何参数,但是在函数体内访问
了overallDecrement和total变量。这是因为其通过捕获在包含它的函数体内已经存在的overallDecrement和total变量⽽实现。由于
没有修改total变量,decrementer实际上捕获并存储了该变量的⼀个副本,⽽该副本随着decrementer⼀同被存储。
所以我们调⽤这个函数时会累加: