假设我有一个带有一些名为testFunction
的函数的基类。我从我的基类继承到几个不同的子类。他们会覆盖testFunction
,但我想强制他们调用super.testFunction()
。有没有办法强制要求这个?
答案 0 :(得分:2)
你可以这样做:
class A {
final func testFunction() {
// do some required stuff
optionalFunction()
}
func optionalFunction() {
// you can override this in subclasses
}
}
class B: A {
override func optionalFunction() {
}
}
因此,子类无法覆盖testFunction
,因此应覆盖optionalFunction
。
答案 1 :(得分:0)
我会承认我先没看过这个,所以可能会有些不正确。
这是不可能的。 init
是编译器查找的特殊情况,并具有指示:
在从初始化程序
返回之前,不会调用Super.init
您可以做的是将您的方法声明为final
,然后使用另一个可覆盖的方法。这不仅可以确保调用原始方法,而且(大部分)也可以保证您可以控制操作顺序。
final func testFunction() {
// do stuff
otherFunction()
// do more stuff
}
func otherFunction() {
fatalError("Must Override")
}