BaseViewController и UIPageViewController в Swift - PullRequest
0 голосов
/ 19 июня 2019

Справочная информация:

Я устанавливаю BaseViewController, который наследует UIViewController в Swift для всех других классов 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 Ответ

1 голос
/ 19 июня 2019

Вы можете написать свой 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.

...