`[]`在swift3.0中关闭

时间:2016-12-05 11:12:45

标签: swift closures

我不明白以下代码:

    var i = 20
    var cb = {
        [i] in
        i
    }
    i = 30
    print(cb()) // 20
  • 此语法表达的内容:[i] in i
  • 我期待这次打印30。为什么要打印20

1 个答案:

答案 0 :(得分:2)

[i]是关闭的捕获列表

来自“The Swift Programming Language”中的Expressions(重点补充):

  

关闭表达

     

捕获列表被写为逗号分隔的表达式列表,这些表达式由方括号括起,位于参数列表之前。如果使用捕获列表,则还必须使用in关键字,即使省略了参数名称,参数类型和返回类型。

     

创建闭包时,捕获列表中的条目被初始化。对于捕获列表中的每个条目,常量被初始化为具有相同名称的常量或变量的值。周围的范围。

在您的示例中,创建闭包时,常量i 使用当时外部i 的值(即20)为闭包创建。当执行闭包时,值为 该常数被返回。