在swift中,任何强制执行super.methodname的方法都被称为?

时间:2015-02-06 21:52:28

标签: ios swift subclass

假设我有一个带有一些名为testFunction的函数的基类。我从我的基类继承到几个不同的子类。他们会覆盖testFunction,但我想强制他们调用super.testFunction()。有没有办法强制要求这个?

2 个答案:

答案 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")
}