我有一个分层的体系结构应用程序,在其中我在ViewModel中获取对象数组并将其与ViewController中的tableview绑定。以下是我的代码: ViewModel:
func getManufacturerList() -> Single<[ManufacturerItem]> {
return self.fetchManufacturerInteractor.getManufacturerList()
.map { $0.map { ManufacturerItem(
manufacturerName: $0.manufacturerName,
manufacturerID: $0.manufacturerID) } }
}
上面的函数从其他层接收对象数组,然后再次从NetworkLayer获取它。
ViewController:
private func setUpViewBinding() {
manufacturerViewModel.getManufacturerList()
.asObservable()
.bind(to: tableView.rx.items(cellIdentifier: LanguageSelectionTableViewCell.Identifier,
cellType: LanguageSelectionTableViewCell.self)) { row, manufacturer, cell in
cell.textLabel?.text = manufacturer.manufacturerName
cell.textLabel?.font = AppFonts.appBoldFont(size: 16).value
cell.accessibilityIdentifier = "rowLanguage\(row+1)"
cell.textLabel?.accessibilityIdentifier = tblCellLabelAccessibilityIdentifier
}.disposed(by: self.disposeBag)
}
现在我应该在哪里添加用于显示/隐藏活动指示器的代码?
答案 0 :(得分:2)
ViewModel 应该处理显示或隐藏IndicatorView(如果只有一个加载视图),因为您的视图需要笨拙,请使用BehaviorRelay而不是变量(描述变量)
在viewModel中
// create a subject and set the starter state, every time your viewModel
// needs to show or hide a loading, just send an event
let showLoading = BehaviorRelay<Bool>(value: true)
// your async function
func getManufacturerList() -> Observable {
// notify subscriber to show the indicator view
showLoading.accept(true)
// do some works
// notify subscribers to hide the indicator view
showLoading.accept(false)
}
并在您的视图控制器中
// bind your indicator view to that subject and wait for events
showLoading.asObservable().observeOn(MainScheduler.instance).bind(to: indicatorView.rx.isHidden).disposed(by: disposeBag)