Skip to content

Instantly share code, notes, and snippets.

@zafarivaev
Last active April 4, 2020 06:53
Show Gist options
  • Save zafarivaev/e14afff896416ea868f9d2688451891b to your computer and use it in GitHub Desktop.
Save zafarivaev/e14afff896416ea868f9d2688451891b to your computer and use it in GitHub Desktop.
import UIKit
import RxSwift
import RxCocoa
class ChooseCountryViewController: UIViewController {
// MARK: - Lifecycle Methods
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
setupNavItem()
bindTableView()
bindSearchBar()
bindCloseItem()
bindHUD()
viewModel.fetchCountries { [weak self] (errorMessage) in
self?.showMessage(errorMessage)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setupNavBar()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.viewModel.didClose.onNext(())
}
// MARK: - Properties
let disposeBag = DisposeBag()
var viewModel: ChooseCountryViewModel!
....
}
// MARK: - Binding
extension ChooseCountryViewController {
func bindTableView() {
viewModel.filteredCountries
.bind(to: tableView.rx.items(cellIdentifier: "CountryTableViewCell", cellType: CountryTableViewCell.self)) { (index, viewModel, cell) in
cell.viewModel = viewModel
}
.disposed(by: disposeBag)
tableView.rx.modelSelected(CountryViewModel.self)
.map { $0.code }
.bind(to: viewModel.selectedCountry)
.disposed(by: disposeBag)
}
func bindCloseItem() {
closeItem.rx.tap
.bind(to: viewModel.didClose)
.disposed(by: disposeBag)
}
func bindSearchBar() {
searchBar.rx.text
.orEmpty
.bind(to: viewModel.searchText)
.disposed(by: disposeBag)
}
func bindHUD() {
viewModel.isLoading
.subscribe(onNext: { [weak self] isLoading in
isLoading ? self?.showProgress() : self?.hideProgress()
})
.disposed(by: disposeBag)
}
}
.....
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment