Swift - 什么是 'class var' 的意思

12

这是在Swift中实现单例模式的解决方案之一。我感到困惑的是为什么在'var'前面添加了'class'。据我所知,Swift不支持类变量,那么为什么在这种情况下使用'class var'可以工作呢?

class Singleton {
    class var sharedInstance : Singleton {
        struct Static {
            static let instance : Singleton = Singleton()
        }
        return Static.instance
    }
}

类变量只能通过计算属性在Swift中支持。如果您删除定义属性“getter”的代码块,则会出现编译错误,“尚未支持类变量”。https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-XID_374 - Craig Otis
2个回答

26

那不是类变量,而是一个计算属性,目前它是被支持的。

// Playground - noun: a place where people can play

class A {
    // Fine:
    class var computed: String {
        return "Woo"
    }
    // Not supported (yet):
    class var realVariable: String = "Woo"
}

1
类变量和类计算属性之间的区别加1。 - Craig Otis
2
这似乎是一种非常奇怪的语言措辞选择。 - drew..
喜欢在您的答案中添加来自Swift编程语言的内容。 "您可以使用static关键字定义类型属性。对于类类型的计算类型属性,您可以改用class关键字,以允许子类覆盖超类的实现。" - MD. Rejaul Hasan

4

类变量类似于静态变量,你可以通过调用 MyClass.myVar 来访问它。然而,静态变量不能在子类中被重写,而类变量可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接