Hi, guys!
Great article and idea! Thanks for sharing it ❤️
I have one proposal tho :)
I feel like it would be more aligned with nature of Observable (side effects should happen on subscription) so in the start method e.g LanguageListCoordinator instead of
override func start() -> Observable<CoordinationResult> {
let viewController = LanguageListViewController.initFromStoryboard(name: "Main")
let navigationController = UINavigationController(rootViewController: viewController)
let viewModel = LanguageListViewModel()
viewController.viewModel = viewModel
let cancel = viewModel.didCancel.map { _ in CoordinationResult.cancel }
let language = viewModel.didSelectLanguage.map { CoordinationResult.language($0) }
rootViewController.present(navigationController, animated: true)
return Observable.merge(cancel, language)
.take(1)
.do(onNext: { [weak self] _ in self?.rootViewController.dismiss(animated: true) })
}
use Observable.defered
override func start() -> Observable<CoordinationResult> {
return Observable.deferred {
let viewController = LanguageListViewController.initFromStoryboard(name: "Main")
let navigationController = UINavigationController(rootViewController: viewController)
let viewModel = LanguageListViewModel()
viewController.viewModel = viewModel
let cancel = viewModel.didCancel.map { _ in CoordinationResult.cancel }
let language = viewModel.didSelectLanguage.map { CoordinationResult.language($0) }
self.rootViewController.present(navigationController, animated: true)
return Observable.merge(cancel, language)
.take(1)
.do(onNext: { [weak self] _ in self?.rootViewController.dismiss(animated: true) })
}
}
Doing so we won't trigger navigation in case you do something like
let startObservable = start()
Hi, guys!
Great article and idea! Thanks for sharing it ❤️
I have one proposal tho :)
I feel like it would be more aligned with nature of
Observable(side effects should happen on subscription) so in the start method e.gLanguageListCoordinatorinstead ofuse
Observable.deferedDoing so we won't trigger navigation in case you do something like