“对于类类型的计算类型属性,您可以使用class关键字来允许子类覆盖超类的实现。”
“您可以覆盖继承的实例或类型属性,以便为该属性提供自己的自定义getter和setter” ---- Apple Swift3
//override static
class A{
var myValue = 0614
static var storedTypeProperty = "Some value"
class var overrideableComputedTypeProperty: Int {
return 1
}
}
class B: A {
storedTypeProperty = "New String"
}
似乎B不会从A继承任何类型的属性。 那么如何在Swift3书中重写“继承的类型属性”。
答案 0 :(得分:0)
您遇到的问题是因为您使用的是static
变量。 static
变量不能被覆盖,完全停止。没有必要在这里争论。
第一句话说,如果您有class
(不是struct
),例如class A {}
,则可以使用class
关键字代替static
}关键字,并覆盖类类型。这意味着,您可以将两个关键字用于相同目的,但主要区别在于static
无法覆盖。
class A {
// overridable computed property
class var overridableClassPropery: String {
return "This is class A's overwritten property"
}
// Not overridable `static` computed property
// Error will be shown if you try to override this property in class `B`
static var notOverridableStaticPropery: String {
return "Can not override this property in a subclass"
}
}
第二个说,您可以覆盖超类类属性,并在子类中提供您自己的get
实现,如下所示:
class B: A {
// Class type computed property can be overwritten
override class var overridableClassPropery: String {
return "This is class B's overwritten property"
}
}
修改强>
notOverridableStaticPropery
继承了class A
的{p> class B
,这意味着您可以通过class B
访问/调用它。 但是您无法覆盖它,它将始终在class A
中设置值。
print(A.notOverridableStaticPropery) // prints "This is class A's not overridable static property"
print(B.notOverridableStaticPropery) // prints "This is class A's not overridable static property"