需要了解闭包的执行顺序

时间:2019-04-10 18:48:17

标签: swift closures

我一直在Playground中尝试使用Swift文档中的一个有关闭包的示例-我在printre语句内添加了增量器函数,并且在返回makeIncrementer函数之前。

func makeIncrementer(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementer() -> Int {
        print("something")
        runningTotal += amount

        return runningTotal
    }
    print("running total is: \(runningTotal)")
    return incrementer
}

let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()
incrementByTen()
incrementByTen()
incrementByTen()
incrementByTen()
incrementByTen()

运行代码时,我得到:

running total is: 0
something
something
something
something
something
something

为什么我每次调用increasingByTen()时都不会执行“ running total is:”打印? -谢谢

1 个答案:

答案 0 :(得分:1)

  • 执行第let incrementByTen = makeIncrementer(forIncrement: 10)

    通过捕获func incrementer()runningTotal创建函数amount,打印running total is..并返回

    func incrementer() -> Int {
        print("something")
        runningTotal += 10
    
        return runningTotal
    }
    

    它不会执行incrementer()
    之后,变量incrementByTen包含整个incrementer()函数

  • 执行第incrementByTen()

    仅执行函数incrementer(),打印something,进行数学运算并返回增加的值。