Skip to content

Instantly share code, notes, and snippets.

@arthur-here
Last active July 24, 2017 10:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arthur-here/100c5f849ea9238cd083b9e688be6c24 to your computer and use it in GitHub Desktop.
Save arthur-here/100c5f849ea9238cd083b9e688be6c24 to your computer and use it in GitHub Desktop.
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