2014-11-05 3 views
-2

У меня в основном есть два контроллера вида. Оба они будут работать с одним другим контроллером/менеджером. Я хочу, чтобы этот менеджер был точно таким же для обоих контроллеров. Поэтому оба контроллера должны иметь ссылку на один и тот же менеджер/контроллер. Существует также третий класс, который использует менеджера.Работайте с несколькими наследованиями

Сначала я думал, что могу просто наследовать менеджера/диспетчера для просмотра контроллеров. Но Свифт не позволяет этого. Итак, как именно я могу реализовать эту идею?

Все с всеми этим делом:

У меня есть эти четыре класса:

FirstViewController (наследует UIViewController)

SecondViewController (Inherits UIViewController)

EventController (не наследует ничего - еще)

MapManager (ничего не наследует)

Для управления функциями firstviewcontroller, secondviewcontroller и MapManager необходимо использовать функции/свойства в EventController.

Что я сейчас:

Во-первых, SecondViewcontrollers и MapManager наследуют от EventController, который имеет тип UIViewController. Тем не менее, в классе менеджера карт свойства EventController не работают должным образом (например: заполненные массивы пустые)

ответ

0

Если у вас есть 2 или более UIViewController (или аналогичных), имеющих общее поведение, вы можете создать базовый класс BaseViewController , унаследованные от UIViewController, а затем сделать ваши специализированные контроллеры вид наследуют от него

 UIViewController 
       | 
     BaseViewController 
     |   | 
ViewController1 ViewController2 

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

Для простоты позвоним дополнительный класс «менеджер». Я вижу 3 альтернативных решений пути:

  1. создать экземпляр менеджера в контроллере базового вида (как свойство), и подвергнуть его интерфейс с помощью методов обертки (т.е. создать протокол для менеджера, реализовать ее в контроллер базовой точки зрения, реализация просто направляет запросы экземпляра менеджера)

  2. создать экземпляр менеджера в контроллере базового вида (как свойство), и сделать его доступным для подклассов

  3. прибудет избавиться от класса менеджера и слить его код в базовый элемент управления viewl er

Этот список, конечно, не является исчерпывающим. Аргумент слишком широк, чтобы дать целенаправленный совет, и нет решения, которое может работать во всех случаях.

+0

Спасибо за ваш ответ. Я забыл упомянуть, что есть еще один класс (типа NSObject), который использует диспетчер (в вашем примере baseviewcontroller). Как выполнить такую ​​иерархию? – Kraishan

+0

Это сильно меняет ситуацию ...обновленный ответ с некоторыми советами, я не могу быть более конкретным, потому что хорошее решение требует гораздо большего знания существующего кода и его архитектуры. – Antonio

+0

Я обновил вопрос. Благодарю. – Kraishan

Смежные вопросы