【发布时间】:2020-01-24 21:39:47
【问题描述】:
我有一个超类
class asuper{
static var x = ""
static func printX{
print(x)
}
}
但是我有一个子类想要更改值 x 我该怎么做?
class asubclass {
static fucn newPrintX{
//want to ensure X is changed before any static method uses x
print(x + "sub")
}
}
【问题讨论】:
-
如果您来自 Java 一词,那么您可能并不真正理解
static的含义。这意味着该方法在编译期间是静态链接的,具体取决于变量的类型。如果变量instance声明为asuper,则instnace.printX()将始终链接到asuper.printX()。这就是static的意思,这就是为什么覆盖没有意义。您需要一个虚拟方法,否则变量的运行时类型不会改变行为。你需要一个class func。 -
关于变量
x,其实是一个属性。您可以覆盖它的 setter 和 getter,并且可以在初始化程序中设置默认值。
标签: swift