有关swift捕获值的问题

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.

阅读 1.9k
1 个回答

第二个函数中,当你传参为 10 时,它一定只返回 10。
第一个函数中,amount 是被捕获在闭包内,当你两次调用 incrementByTen() 时,amount 确确实实的增加了,所以最后得出的值会不一样。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进