我不明白以下代码:
var i = 20
var cb = {
[i] in
i
}
i = 30
print(cb()) // 20
[i] in i
?30
。为什么要打印20
?答案 0 :(得分:2)
[i]
是关闭的捕获列表。
来自“The Swift Programming Language”中的Expressions(重点补充):
关闭表达
捕获列表被写为逗号分隔的表达式列表,这些表达式由方括号括起,位于参数列表之前。如果使用捕获列表,则还必须使用in关键字,即使省略了参数名称,参数类型和返回类型。
创建闭包时,捕获列表中的条目被初始化。对于捕获列表中的每个条目,常量被初始化为具有相同名称的常量或变量的值。周围的范围。
在您的示例中,创建闭包时,常量i
使用当时外部i
的值(即20
)为闭包创建。当执行闭包时,值为
该常数被返回。