首页 > 有关swift捕获值的问题

有关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.


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

【热门文章】
【热门文章】