func makeIncrementor(forIncrement amount:Int) -> () -> Int{
var runningTotal = 0
func incrementor() -> Int{
runningTotal += amount
return runningTotal
}
return incrementor
}
let incrementByTen = makeIncrementor(forIncrement: 10)
incrementByTen() //10
incrementByTen() //20
func makeIncrementor(forIncrement amount:Int) -> Int{
var runningTotal = 0
func incrementor() -> Int{
runningTotal += amount
return runningTotal
}
return incrementor()
}
let incrementByTen = makeIncrementor(forIncrement: 10)
incrementByTen //10
incrementByTen //10
在学习swift闭包捕获值的时候,我遇到了这个问题,在第二部分的代码里相对第一部分做了一些小改动,想请教一下为什么返回值总是10了,并不像第一个一样一直叠加。我大致能感觉到是因为第二段代码里面给incrementByTen是赋值了一个具体的Int类型的值,但是在第二段代码里面重新进行一次makeIncrementor(forIncrement: 10)后得到的值还是10.
第二个函数中,当你传参为 10 时,它一定只返回 10。
第一个函数中,amount 是被捕获在闭包内,当你两次调用
incrementByTen()
时,amount 确确实实的增加了,所以最后得出的值会不一样。