Swift 一类带{}()的无体闭包?
我看到了可以包含任意数量语句的变量初始化代码示例,例如:Swift 一类带{}()的无体闭包?,swift,variables,initialization,Swift,Variables,Initialization,我看到了可以包含任意数量语句的变量初始化代码示例,例如: var _globalCounter = 0 let instanceCount: Int = { _globalCounter++ }() print(instanceCount.dynamicType) // Int 以及完整的代码示例: struct User { let name: String let company: String let login: String let password:
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
}()
}
struct用户{
let name:String
让公司:字符串
让我们登录:String
设置密码:String
静态let数据库:字典={
var theDatabase=Dictionary()
适用于中的用户[
用户(姓名:“John Appleseed”,公司:“Apple”,登录名:“japple”,密码:“foo”),
用户(姓名:“John Hennessy”,公司:“Stanford”,登录名:“Hennessy”,密码:“foo”),
用户(姓名:“坏人”,公司:“罪犯公司”,登录名:“坏人”,密码:“foo”)
] {
数据库[user.login]=用户
}
返回数据库
}()
}
发生什么事了?从闭包赋值是否与从函数调用赋值一样
这些样本是从cs 193p 2014年秋季课程中复制的,与将内容放入init相比,这些样本在复杂变量初始化方面是否被认为是良好的实践
请注意,在第二个示例中,变量是静态的,所以实际上这是一个线程安全的初始化代码
我在学斯威夫特,而且很困惑。是的,闭包只是一个函数。与任何其他函数一样,可以通过在括号内传递参数来调用它。如果它是一个不带参数的函数,那么可以用空括号调用它
let one: Int = { return 1 }()
其实很简单:)是的,函数在swift中被命名为闭包。您不能从init()分配它,因为它是静态的。这方面的新功能是语法,您可以在变量定义语句中定义和执行闭包。是的,我一开始也觉得很奇怪。有一次我用了几次,它突然发出咔嗒声。