/**
闭包的捕获值
也就是闭包可以捕获上下文中的值
*/
let incFunc1 = getInFunc(inc: 3)
print(incFunc1)
print("------------------>")
print(incFunc1(10))
let incFunc2 = getInFunc2(inc: 3)
print("------------------>")
print(incFunc2(10))
print(incFunc2(10))
/**
v==10
inc==3
mt==11
24
mt==12 // 它记住了上次的值11, 并不是说又变成10
25
*/
// 返回的是一个闭包 (Int) -> Int
func getInFunc(inc:Int) -> ( (Int) -> Int ) {
func incFunc(v: Int) -> Int {
print("v==\(v)")
print("inc==\(inc)")
// inc在函数中生命周期结束了,但是可以捕获 inc的 值
return inc + v
}
return incFunc
}
// 返回的是一个闭包 (Int) -> Int
func getInFunc2(inc:Int) -> ( (Int) -> Int ) {
var mt = 10
func incFunc(v: Int) -> Int {
mt = mt + 1
print("v==\(v)")
print("inc==\(inc)")
print("mt==\(mt)")
// inc, mt 在函数中生命周期结束了,但是可以捕获 inc, mt的 值
return inc + v + mt
}
return incFunc
}