#swift #navigation #viper-architecture
Вопрос:
Маршрутизатор содержит ссылку на навигационный контроллер, который содержит сложенные контроллеры просмотра 1,2,3 (из модулей 1,2,3). Теперь модуль 3 командует маршрутизатором navigationController.popToRoot
и должен звонить someFunc()
из модуля 1.
Если это обычный проект , который я вызываю popToRoot
, получите контроллер корневого представления и позвоните someFunc()
напрямую. Но как это правильно сделать с архитектурой VIPER?
Ответ №1:
Я бы предложил два способа:
1) Внедрить Координатора. Сообщите Координатору , что есть a navigationController
, и сделайте его доступным для каждого Router
, предположительно двунаправленного. Затем координатор может вызвать метод Module1, когда Module3 будет выполнен.
2) Внедрите систему уведомлений. Просто продолжайте звонить popToRoot
в Module3 Router
и отправляйте уведомления в NotificationCenter
. Поскольку модуль 1 все еще будет жив (поскольку они сложены), он может действовать/реагировать соответствующим образом.
Я бы проголосовал за первый вариант, хотя наличие координатора в VIPER очень (и субъективно) помогает с маршрутизацией.