Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 一类带{}()的无体闭包?_Swift_Variables_Initialization - Fatal编程技术网

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()分配它,因为它是静态的。这方面的新功能是语法,您可以在变量定义语句中定义和执行闭包。是的,我一开始也觉得很奇怪。有一次我用了几次,它突然发出咔嗒声。