-
-
Save arthur-here/100c5f849ea9238cd083b9e688be6c24 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
override func start() -> Observable<Void> { | |
... | |
// Observe request to show Language List screen | |
viewModel.showLanguageList | |
.flatMap { [weak self] _ -> Observable<String?> in | |
guard let `self` = self else { return .empty() } | |
// Start next coordinator and subscribe on it's result | |
return self.showLanguageList(on: viewController) | |
} | |
// Ignore nil results which means that Language List screen was dismissed by cancel button. | |
.filter { $0 != nil } | |
.map { $0! } | |
// Bind selected language to the `setCurrentLanguage` observer of the View Model | |
.bind(to: viewModel.setCurrentLanguage) | |
.disposed(by: disposeBag) | |
... | |
// We return `Observable.never()` here because RepositoryListViewController is always on screen. | |
return Observable.never() | |
} | |
// Starts the LanguageListCoordinator | |
// Emits nil if LanguageListCoordinator resulted with `cancel` or selected language | |
private func showLanguageList(on rootViewController: UIViewController) -> Observable<String?> { | |
let languageListCoordinator = LanguageListCoordinator(rootViewController: rootViewController) | |
return coordinate(to: languageListCoordinator) | |
.map { result in | |
switch result { | |
case .language(let language): return language | |
case .cancel: return nil | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment