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

Kaz*_*rus 6 subclass swift

我有一个超类,它有一个方法的基本实现(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
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法NS_REQUIRES_SUPER在swift中使用,或者使用协议来模仿这种行为?

hol*_*roy 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"
Run Code Online (Sandbox Code Playgroud)

此代码不允许重写该bar()方法,但允许重写该foo()方法。技巧是用户需要调用bar()方法而不是foo()方法,但是如果你做到了这一点,那么你就可以确保超类方法,即println("A: Bar")总是被调用!:-)