一种带有 {}() 的无体闭包?

A type of bodiless closure with {}()?

我看到了可以包含任意数量语句的变量初始化代码示例,例如:

var _globalCounter = 0
let instanceCount: Int = { _globalCounter++ }()
print(instanceCount.dynamicType) // Int

和完整的代码示例:

struct User {
    let name: String
    let company: String
    let login: String
    let password: String        

    static let database: Dictionary<String, User> = {
        var theDatabase = Dictionary<String, User>()
        for user in [
            User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
            User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
            User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
        ] {
            theDatabase[user.login] = user
        }
        return theDatabase
    }()
}

这是怎么回事?它是像从函数调用中赋值那样从闭包中赋值吗?

这些示例是从 2014 年秋季 cs 193p 复制而来的 class,与将内容放入 init 相比,这些示例在复杂变量初始化方面是否被认为是好的做法?

请注意,在第二个示例中,变量是静态的,所以实际上这是一个线程安全的初始化代码?

我正在#learning swift 和#confused。

是的,闭包只是一个函数。与任何其他函数一样,您可以通过在括号内传递参数来调用它。如果它是一个不带参数的函数,那么你用空括号调用它。

let one: Int = { return 1 }()

其实就这么简单:)