一种带有 {}() 的无体闭包?
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 }()
其实就这么简单:)
我看到了可以包含任意数量语句的变量初始化代码示例,例如:
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 }()
其实就这么简单:)