给定类 Obj
,
class Obj: NSObject {
var x = "x"
}
及其子类Obj1
,如何更改var x
的默认值?
简单地设置一个新值最有意义,但它似乎出错了......
class Obj1: Obj {
var x = "y"
}
❗️ Cannot override with a stored property 'x'
最佳答案
在大多数情况下,通过 init
注入(inject)这些值是首选方式。
例如:
class Foo
{
var x : String
convenience init()
{
self.init(x: "x") // 'x' by default
}
init(x: String)
{
self.x = x
}
}
class Bar : Foo
{
convenience init()
{
self.init(x: "y") // now 'y' by default
}
init(x: String)
{
super.init(x: x)
}
}
但是,在某些情况下,您想要覆盖计算属性或可能未完全初始化的属性。
在这种情况下,您可以使用override var
语法:
override var x : String
{
get { return super.x } // get super.x value
set { super.x = newValue } // set super.x value
}
上面的代码并没有改变行为,而是说明了允许你这样做的语法。
关于覆盖实例变量的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24122913/