有没有办法将swift方法注释为需要调用其超类的实现

时间:2014-12-01 21:08:59

标签: swift subclass

我有一个超类,它有一个方法的基本实现(在我的例子中是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,或者使用协议来模仿这种行为?

1 个答案:

答案 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")是总是叫! : - )