我正在尝试观察一个变量,当该变量的某些属性符合条件时,我想进行“可观察”API 调用并将该调用的结果与某些 UI 元素绑定(bind)。它按照我在这里展示的方式工作,但我认为它可以更好地实现,因为现在我正在嵌套订阅方法:
self.viewModel.product
.asObservable()
.subscribe { [weak self](refreshProduct) in
self?.tableView.reloadData()
self?.marketProduct.value.marketProduct = refreshProduct.element?.productId
if refreshProduct.element?.stockQuantity != nil {
self?.viewModel.getUserMarketCart()
.map({ (carts) -> Bool in
return carts.cartLines.count > 0
}).bind(onNext: { [weak self](isIncluded) in
self?.footerView.set(buyable: isIncluded)
}).disposed(by: (self?.disposeBag)!)
}
}.disposed(by: disposeBag)
还有其他方法可以做到这一点吗?我可以在第一个可观察到的情况下获得过滤器,但我不明白如何调用另一个并将其绑定(bind)到 UI 上。
注意:为了代码清晰,我排除了其他几行代码。
最佳答案
典型的解决方案是使用.switchLatest(),如下所示。
- 创建 *let switchSubject = PublishSubject
>()" - 将 UI 绑定(bind)到其最新值:switchSubject.switchLatest().bind(...
- 使用新请求更新“switchSubject”:switchSubject.onNext(newServiceCall)
关于ios - 如何使用 RxSwift 有条件地观察和绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47769382/