在下面的代码中,我的意图是在基类中声明repeatNum
,因为它用于基类(在init
和其他函数内部)。每个子类都应该设置repeatNum
,因为只有子类知道自己的值。
class Base {
var repeatNum: Int
init() {
for var i=0; i<repeatNum; ++i {
print("*")
}
}
}
class SubClass1 : Base {
override init() {
repeatNum = 10
super.init()
}
}
class SubClass2 : Base {
override init() {
repeatNum = 5
super.init()
}
}
当然,它会提示一些错误:
对于基类:
“self.repeatNum”未初始化
从初始值设定项返回,而不初始化所有存储的属性。
对于子类:
在super.init初始化self之前,在属性访问repeatNum中使用“self”
我知道在子类中设置
super.init()
之前,我可以简单地调用repeatNum
,但在实际情况中,我确实需要在基类的repeatNum
中使用init()
。不知怎的,这对我来说成了一个悖论。我也知道我可以改变设计,使错误消失,但我想知道是否有可能实现我的初衷与一些微调?我可能错过了一些东西。
最佳答案
你现在的代码甚至不能编译,是吗?它应该抱怨在初始化之前试图使用repeatNum
。。。
也许这样的事情对你来说是个选择?
class Base {
var repeatNum: Int
init(repeatNum: Int) {
self.repeatNum = repeatNum
for _ in 0..<repeatNum {
print("*")
}
}
}
class SubClass1 : Base {
init() {
super.init(repeatNum: 10)
}
}
class SubClass2 : Base {
init() {
super.init(repeatNum: 5)
}
}
关于swift - 如何在子类的初始化器中初始化将在父类(super class)的初始化器中使用的变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35170404/