我有一个超类,它有一个方法的基本实现(在我的例子中是prepareForSegue:sender:
),我想确保任何覆盖此方法的子类都调用super的实现。
class A {
func foo() {
// Some basic shared behavior
}
}
class B : A {
override func foo() {
// I want the compiler to yell at me if I forget super.foo() here
}
}
有没有办法在swift中使用NS_REQUIRES_SUPER
,或者使用协议来模仿这种行为?
答案 0 :(得分:0)
可能有一种方法可以解决这个问题:
class A {
private func foo() { println("A: Foo") }
final func bar() {
println("A: Bar")
foo()
}
}
class B : A {
override private func foo() { println("B: foo") }
}
var a = A()
a.bar() // "A: Bar\nA: Foo"
println()
var b = B()
b.bar() // "A: Bar\nB: Foo"
此代码不允许覆盖bar()
方法,但允许覆盖foo()
方法。那么诀窍是用户需要调用bar()
方法而不是foo()
方法,但如果你做到了这一点,那么你可以确保超类方法,即println("A: Bar")
是总是叫! : - )