Swift中的BaseViewController和UIPageViewController

时间:2019-06-19 00:50:32

标签: swift oop protocols

背景:

我正在设置一个BaseViewController,它继承了Swift中的UIViewController,以供所有其他ViewController类继承并采用它的属性。

问题:

但是,当创建一个也继承自UIPageViewController(和BaseViewController)的类时,我们会继承UIViewController的继承

这将导致多重继承错误。对此建模的另一种方式是什么?

尝试过:

我尝试使用协议方法代替,以便BasePageViewController将实现协议BaseViewController,但是,我找不到将函数放入协议中以供BasePageViewController继承的方法。另外,我不知道这可能会对将来产生什么影响。

任何帮助将不胜感激,谢谢!!

class BaseViewController: UIViewController {
    func someFunction(){}
}

class PageBaseViewController: BaseViewController, UIPageViewController {
    //this class overlaps in inheritance to UIViewController
    // Error -> Multiple Inheritance from classes UIPageViewController and BaseViewController
}

1 个答案:

答案 0 :(得分:1)

您可以这样写protocol

protocol BaseViewProtocol {
    func someFunction()
}

extension BaseViewProtocol where Self: UIViewController {

    func someFunction() {
      // Logic
    }
}

然后您将PageBaseViewController遵守协议。

class PageBaseViewController: UIPageViewController, BaseViewProtocol

现在,您的PageBaseViewController具有someFunction扩展名中声明的逻辑功能protocol

但是,如果您使用的是Swift 4,我认为这种方法会有一些问题。https://bugs.swift.org/browse/SR-5581

在Swift 5上您应该很安全。