如何有条件地观察和绑定RxSwift

时间:2017-12-12 09:40:09

标签: ios swift ios11 rx-swift

我试图观察变量,当这个变量的某些属性符合条件时,我想制作一个"可观察的" API调用并使用某个UI元素绑定该调用的结果。它的工作方式与我在这里呈现的方式相同,但我认为它可以更好地实现,因为现在我正在嵌套订阅方法:

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)

还有其他办法吗?我可以在第一个observable上获得一个过滤器,但我不明白如何调用另一个并将其绑定在UI上。

注意:为了清晰起见,我排除了一些其他代码行。

1 个答案:

答案 0 :(得分:0)

典型的解决方案是使用 .switchLatest(),如下所示。

  • create * let switchSubject = PublishSubject< Observable< Response>>()“
  • 将UI绑定到它的最新值: switchSubject.switchLatest()。bind(...
  • 使用新请求更新'switchSubject': switchSubject.onNext(newServiceCall)