ios - 如何使用 RxSwift 有条件地观察和绑定(bind)

标签 ios swift ios11 rx-swift

我正在尝试观察一个变量,当该变量的某些属性符合条件时,我想进行“可观察”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/

相关文章:

swift - 在类中包含 NSDateFormatter 的问题

swift - iOS 11 中的 UIRefreshControl() 故障效果

ios - 位置坐标无效

ios - 两个nsdates之间的时间差

ios - 解析结果的登录验证

ios - 以编程方式从一个 View Controller 切换到另一个

app-store - iTunesConnect - 如何检索现有应用程序的 1024x1024 图标?

ios - 像 Pebble 一样捕获所有 iOS 推送通知

ios - 如何在文本字段和键盘中隐藏蓝色光标?

ios - Xcode Swift 将 TextField 内容传递到网站 textField