背景:
我正在设置一个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
}
答案 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上您应该很安全。