我正在尝试编写两个Swift类,一个是另一个的子类,需要使用其中一个超类'属性并使用它来配置它自己。
class BaseClass {
let someValue: Double
let size: CGSize
init (size: CGSize) {
self.size = size
self.someValue = size.width / 2.0 //Doesn't really matter how this is calculated
}
}
class Subclass: BaseClass {
let someNewValue: Double
override init(size: CGSize) {
super.init(size: size)
self.someNewValue = self.someValue * 2
}
}
问题是子类要求它对super.init
的调用是在为其所有属性设置初始值之后。但是,执行此操作的self.someNewValue = self.someValue * 2
调用依赖于首先调用super的init来设置self.someValue
。我想我可以通过在BaseClass上将let someValue: Double
转换为var someValue: Double
来解决这个问题,然后在子类的init和基类的init中设置它的值,但这看起来很糟糕。
答案 0 :(得分:2)
我在这里看到两个解决方案:
让someNewValue
隐式解包可选
class Subclass: BaseClass {
let someNewValue: Double!
override init(size: CGSize) {
super.init(size: size)
self.someNewValue = self.someValue * 2
}
}
或在计算最终值
之前给someNewValue
一些默认值
class Subclass: BaseClass {
let someNewValue: Double = 0.0
override init(size: CGSize) {
super.init(size: size)
self.someNewValue = self.someValue * 2
}
}
两种方法都不应该引起任何问题