xcode - 嵌套函数中首先执行的是什么?

标签 xcode swift closures

当我创建一个常量来让我的闭包工作时:

let incrementByTen = makeIncrementer(forIncrement: 10)

它是否会跳过incrementer(),直到在return语句中调用它,这样return语句才能最终运行incrementer()函数并接收其值?

func makeIncrementer(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0
    func incrementer() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementer
}

最佳答案

函数的参数在调用函数时进行计算。在这种情况下,这意味着当调用 makeIncrementer 时,将在实际调用 makeIncrementer 之前评估其参数(本例中为 10)。

同样,当makeIncrementer被调用时,它的代码会依次执行,初始化runningTotal,然后初始化incrementer(注意,此时point amount 已被评估,因此在返回的增量中,它始终为 10。

随后,当您调用 incrementByTen() 时,在调用之前无需传递任何参数,也无需评估任何内容,作为执行闭包的一部分,runningTotal 将按 amount 递增,在本例中,始终为 10。

关于xcode - 嵌套函数中首先执行的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36242824/

相关文章:

swift - 如何在 WKWebview iOS 12 中注入(inject) cookie

ios - 为什么 Swift 闭包变量类型不能隐式解包可选值?

swift - 将 Int 保存到核心数据中的正确方法?

ios - 如何使用animationWithDuration和Chameleon Gradients?

iphone - 自定义 UITableViewCell 未使用 .xib(很可能是因为 init 方法中的缺陷)

objective-c - 使用 NSNotifications 发送无法识别的选择器

swift - 在swift中向闭包内的变量添加值

c# - 使用闭包而不是共享状态锁的优点和缺点是什么?

swift - Xcode 8 beta 6 : main. swift 无法编译

ios - 覆盖函数错误!方法不会覆盖其父类(super class)中的任何方法