Передача данных в существующую модель представления в шаблоне MVVM-C на iOS - PullRequest
1 голос
/ 11 октября 2019

Я работаю над приложением, использующим шаблоны Coordinator и MVVM.

Протокол координатора выглядит следующим образом:

protocol Coordinator: class {
    func start()
    func start(with deeplink: DeeplinkOption?)
}

Метод start имеетлогика запуска текущего потока координатора, например, создание соответствующего начального контроллера представления, модели представления и т. д.

Я пытался добавить обработку глубоких ссылок к протоколу Coordinator с помощью метода start(with deeplink: DeeplinkOption?). Проблема заключается в том, что мне нужно передать данные глубоких ссылок в уже существующую модель представления в конкретном координаторе, и этот координатор не содержит ссылку на целевую модель представления. Например, представьте следующий стек:

  • appCoordinator

  • координатор чата

    • экран чата
    • экран сведений о пользователе

В данный момент пользователь находится на экране сведений о пользователе, и мне нужно передать действие deeplink модели представления экрана чата. Также нет причин заново создавать экран чата, как это делается в методе start, поскольку экран чата уже находится в стеке навигации.

Есть ли удачное решение для этой проблемы (и координаторшаблон в целом) без сохранения ссылки на соответствующую модель представления?

Ответы [ 3 ]

1 голос
/ 23 октября 2019

Для этого нужно добавить наблюдателя. Нет необходимости передавать данные в модель представления.

Вызов наблюдателя из любой точки мира - лучший способ передачи данных MVVM

0 голосов
/ 23 октября 2019

Шаблон Observer может использоваться для передачи данных между этими компонентами. Пример (в несколько ином контексте) можно найти здесь .

Он включает регистрацию наблюдателей с источником данных и уведомление об этом, когдаисточник данных изменяется. В Swift вы можете сделать это, используя didSet { ... }, вызывая метод для наблюдателей, чтобы сообщить им об изменении данных.

0 голосов
/ 22 октября 2019

Вместо передачи данных в модель представления через Координатор, вы можете добавить наблюдатель в соответствующую модель представления, в которую вы хотите передать данные. Наблюдатель будет прослушивать данные, и как только вы вызовете наблюдателя отовсюду, данные будут переданы.

В целом по схеме наблюдателя это может быть достигнуто.

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