我正在尝试编写两个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
,执行此操作的调用依赖于首先调用set的super的init self.someValue
。我想我可以通过打开BaseClasslet someValue: Double
来解决这个问题var someValue: Double
,然后在子类的init和基类的init中设置其值,但这似乎很糟糕。
我在这里看到两个解决方案:
使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
}
}
两种方式都不会造成任何问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句