Для обновления вашего пользовательского интерфейса я предлагаю использовать переменную viewState
, которую вы можете обновлять при необходимости в классе модели представления, например:
/// Making it generic allow you to add your view specific state
public enum ViewState<T> {
// add all the case you need
case loading
case ready(T)
case failure(Error)
}
Затем в вашем классе viewModel:
let viewState: Variable<ViewState<YourViewControllerState>> = Variable<ViewState<YourViewControllerState>>(.loading)
Где YourViewControllerState - перечисление с вашими конкретными случаями:
enum YourViewControllerState {
case progressBarShowed, //...
}
И, наконец, в вашем ViewController:
viewModel.viewState
.asObservable()
.observeOn(MainScheduler.instance)
.subscribe { [weak self] _ in
self?.updateUI()
}.disposed(by: disposeBag)
private func updateUI() {
guard isViewLoaded else {
return
}
switch viewModel.viewState.value {
case .ready(.progressBarShowed):
progressBar.hide = viewModel.getProgressBarVisibility()
case .failure:
errorMessageLabel.hide = viewModel.getErrorMessageVisibility()
errorMessageLabel.text = viewModel.getErrorMessageText()
}
}