需要UIViewController子类来覆盖特定方法

时间:2017-10-25 17:35:13

标签: ios swift protocols abstract

我有一个超类UIViewController类,它实现了几个默认方法,例如:

class Super: UIViewController {
    override func viewDidLoad () {
        setupView()
    }

    func setupView () {
        initToolbar()
        setPageTitle()
    }

    func initToolbar () {
         // some code..
    }

    func setPageTitle () {
         // nothing?
    }
}

和从Super继承的子类:

class Sub: Super {
    override func setPageTitle () {
        self.title = "custom title"
    }
}

我想强制所有子类覆盖setPageTitle()方法(如果不存在实现,则强制编译时错误)。但是,我设法实现此目的的唯一方法是在Super类中提供包含assert语句的默认实现,如果尚未覆盖,则会导致应用程序崩溃。这不是我真正想要的,因为错误只出现在运行时,理想情况下,如果方法没有实现,我会喜欢编译时警告/错误。有没有办法将此方法设置为要求覆盖?与其他语言的抽象方法类似?

我想过使用协议&扩展但看起来像扩展我不能覆盖viewDidLoad方法,这对于超类来说是必要的。

有什么想法吗?

0 个答案:

没有答案