为什么类中不支持类存储属性?

时间:2017-07-28 18:13:45

标签: swift

基本上,Swift不允许我这样做 -

//类中不支持的类存储属性是指'静态'。

class var hello = "hello"

然而这很好 -

static var hi = "hi"

我知道Swift中Class和Static之间的区别在于Class变量不能存储存储的属性,而Static变量可以。但是,Class和Static变量之间的根本区别在于,静态变量不能在子类中重写,而类变量可以。这是我希望保留的功能。

我知道对这个问题的一个简单修复就是使用像这样的hacky修复程序将其作为计算属性 -

class var Greeting : String {
    return "Greeting"
}

这确实解决了这个问题,我希望它能帮助一些人上网。但是,我想知道是否有人知道Swift为什么会这样做,并且不允许在类级别变量中存储属性。

2 个答案:

答案 0 :(得分:0)

似乎swift has not implemented,但假设编译器错误

  

“班级不支持类存储属性”

enter image description here

答案 1 :(得分:0)

您班上的classstatic成员之间有什么区别?

在这两种情况下,成员本身都属于Class类型(不是实例),但有微小区别:类成员可以被子类覆盖

现在,在Swift中可以覆盖哪种成员?

答案是:

1。方法

是的,method当然可以被覆盖,因此您可以使用class修饰符进行标记

class Animal {
    class func name() ->  String {
        return "Animal"
    }
}

class Dog: Animal {
    override class func name() ->  String {
        return "Dog"
    }
}

Animal.name() // Animal
Dog.name() // Dog

2。计算属性

计算属性是一种特殊的方法。实际上,对于接受0参数并返回值的方法,它基本上是一种语法糖。

class Animal {
    class var name: String { return "Animal" }
}

class Dog: Animal {
    override class var name: String { return "Dog" }
}

Animal.name // Animal
Dog.name // Dog

这就是为什么您只能将class修饰符添加到方法和计算属性的原因。