Множественное наследование от пользовательской библиотеки UIViewController и CocoaPods - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть два пользовательских UIViewController, второй расширяется от первого следующим образом: UIViewController <- CustomVC1 <- CustomVC2 </p>

Теперь я хочу использовать XLPagerTabStrip в новом контроллере, который я хочу, чтобы он наследовал от CustomVC2 и XLPagerTabStrip, но Swift не допускает множественное наследование, и мне нужны некоторые функции и свойства от них обоих.

Мой первый подход состоял в том, чтобы все мои пользовательские ВК наследовали от XLPagerTabStrip, но я не хочу добавлять дополнительную функциональность во все контроллеры только потому, что она мне нужна в одном.

Мой второй подход состоял в том, чтобы разветвить библиотеку и заставить ее наследовать от моего CustomVC2 вместо UIViewController, но тогда мне придется поддерживать совместимость с библиотекой.

Я уверен, что кто-то должен был столкнуться с той же проблемой, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 03 сентября 2018

Одним из способов достижения этого является извлечение как можно большего количества функциональных возможностей в расширения протокола, а затем вызовите методы, где это применимо.

например:.

protocol SomeFunctionality {
    func doSomething()
}

extension SomeFunctionality {
    func doSomething() {
        // call api, or whatever else
    }
}

Если вам нужны специфичные для UIViewController вещи в doSomething (), вы можете ограничить расширение следующим образом:

extension SomeFunctionality where Self: UIViewController {
    //... now you have access to self.view and those things
}

Вы можете также ограничить использование Self другими протоколами, чтобы обеспечить реализацию по умолчанию большего количества функций одновременно.

Таким образом, вы должны вызывать doSomething () только там, где вам нужно в вашем подклассе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...