我看到变量初始化代码的示例,可以包含任意数量的语句,例如:
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
}()
}
发生了什么事?它是从一个闭包赋值,比如从函数调用中赋值吗?
这些样本是从cs 193p 2014年秋季课程复制的,与在init中放入内容相比,这些被认为是复杂变量初始化方面的良好实践吗?
请注意,在第二个示例中,变量是静态的,所以这是一个线程安全的初始化代码吗?
我是#learning swift和#confused。
答案 0 :(得分:3)
是的,闭包只是一个功能。与任何其他函数一样,您可以通过传入括号内的参数来调用它。如果它是一个不带参数的函数,那么用空括号调用它。
library(dplyr)
myDF %>%
mutate_each(funs(./lag(.))) %>%
cbind(myDF, .)
# a b a b
# 1 1 3.000000 NA NA
# 2 2 7.333333 2.000000 2.444444
# 3 3 11.666667 1.500000 1.590909
# 4 4 16.000000 1.333333 1.371429
实际上就这么简单:)