【发布时间】:2014-10-23 19:58:12
【问题描述】:
我正在阅读一本关于 swift 的书,并遇到了这个闭包值捕获示例。
func makeStateMachine(maxState: Int) -> StateMachineType {
var currentState: Int = 0
return {
currentState++
if currentState > maxState {
currentState = 0
}
return currentState
}
}
let bistate = makeStateMachine(1)
println(bistate());
println(bistate());
println(bistate());
println(bistate());
输出应该是'1 0 1 0'
我了解返回块如何在函数执行后捕获本地值“currentState”值,但为什么在下一次函数调用时该值不设置回 0? 是因为双态常数的实例吗?还是因为在双态初始化时 currentState 被初始化为 0 并且编译器推断出
var currentState: Int = 0
被忽略?我对第一次通话后如何处理上述行感到困惑。
【问题讨论】:
-
我想我已经弄清楚了,但是有人可以确认吗?是因为函数返回闭包本身而不是整个函数吗?这对于闭包如何仍然保持函数中定义的局部变量更有意义。