gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:32:17 24 4
gpt4 key购买 nike

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

class stored properties not supported in classes did you mean 'static'.

class var hello = "hello"

不过这很好:

static var hi = "hi"

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

我知道解决此问题的一个简单方法是使用像这样的 hacky 修复程序将其设为计算属性:

class var Greeting : String {
return "Greeting"
}

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

最佳答案

class 和类的 static 成员有什么区别?

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

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

答案是:

方法

是的,一个方法当然可以被覆盖,所以你可以用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

计算属性

计算属性是一种特殊的方法。事实上,它基本上是一个接受 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 修饰符添加到方法和计算属性。

关于swift - 为什么类中不支持类存储属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com