我一直在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:”打印? -谢谢
答案 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
,进行数学运算并返回增加的值。