Comments 8
Круто! У нас тоже очень похожая реализация. Только вместо листнера у нас сам Routable (который у нас называется Navigator :)) отдает onPopped/onPushed и держит ридонли пропертю - modulesInAStack: Int. Идея инкапсулировать управление зависимостями это топ.
Не могли бы вы более подробно разъяснить про этот кусок кода
func openLoginFlow() {
let unit = coordinatorsFactory.makeLoginCoordinator(output: self)
unit.coordinator.start(with: .login(source: .favouriteList))
router.presentModule(unit.view)
}
unit это по сути тот же кортеж? (coordinator, presentable)
output как self передается в метод фабрики. Оно работает по типу "классического" делегата в iOS, что-то типа loginCoordinatorOutputDelegate?
Добрый день! Всё верно: unit — это кортеж, а output и есть делегат)
В таком случае упор на то, что "кода стало меньше" я бы не стал делать). Делегат тоже надо где-то реализовывать и как раз таки через клоужер, на мой взгляд, это делать удобнее (читаемость "сверху-вниз" в одном скоупе непосредственно в месте создания координатора). Полагаю модули у вас работают с таким же подходом и нагромождение extension'ов-реализаторов всех этих аутпутов лично для меня уменьшает читаемость. Хотя даже в нашей команде есть разногласия по этому поводу, так что это дело вкуса). Еще раз спасибо за статью!
Было бы интересно, если такое возможно, послушать более детально как такую идеологию натянуть на SwiftUI с его особенностями навигации и натягивается ли оно в принципе)
Отличная статья! Посмотрел вашу реализацию в демо проекте на github, но в ней есть баг и хотелось бы узнать решили ли вы его.
Если в таббаре сделать Push модуля, затем сделать неполный swipe back и отменить его, то есть немного потянуть с края экрана и остаться на том же экране, то происходит dealloc координатора и все переходы в нем ломаются.
Очень хотелось бы посмотреть реализацию какого нибудь демо приложения с использованием вашей идеи.
С ходу складывается ощущение что могут происходить утечки памяти или непредсказуемое поведение при игре с жестами скрытия модального экрана или swipe to back, хочется опровергнуть или попытаться исправить.
Или может вообще отойти от истории с parentCoordinator и зависимостями для координаторов, тогда и не надо будет ничего сообщать назад при удалении экрана, а если и нужно канал связи настроить между, так всегда делегата можно приписать...
В общем, хотелось бы поэкспериментировать немного)
Почему абстракция от UIKit
использует UIViewControllerAnimatedTransitioning
?
Управляем навигацией в iOS-приложениях. Паттерн координатор от СберМаркета