代码之家  ›  专栏  ›  技术社区  ›  Alex

不带“in”关键字的Swift闭包捕获列表

  •  0
  • Alex  · 技术社区  · 1 年前

    有人知道这是在哪里记录的吗?我搜索的所有地方,关闭都需要 in 关键字位于捕获列表之后,但在一个有效的情况下,您可以只指定捕获列表。我想这是显式关闭的默认行为。

    var greeting = "Hello, playground"
    
    let closure = { [greeting]
         print(greeting) 
    }
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Alexander    1 年前

    这个 in 关键字 如果你想有一个捕获列表,这是必需的。不要忽视编译器警告!

    warning: expression of type '[String]' is unused
    let closure = { [greeting]
                    ^~~~~~~~~~
    

    它告诉你这个 [greeting] 被理解为 [String] (即。 Array<String> ). 所以这是一个未使用的单元素数组文字,就像你写的那样:

    let closure = {
        [greeting] // Unused Array!
        print(greeting)
    }
    

    你需要 在里面 从而将此语法视为捕获列表。