【问题标题】:Observe two sources of data at once同时观察两个数据源
【发布时间】:2019-05-23 14:58:50
【问题描述】:

我正在学习 RxSwift 和 RxCocoa。 我遇到了这个问题:

我有 UITextField 和 UIPickerView 和 UIButton。 一旦 UITextField 有效,应该启用 UIButton。从 UIPickerView 中选择的每个项目都有不同的验证正则表达式。

这是我目前的代码:

        textField.rx.text
            .map({ (text) -> Bool in
                return self.validate(text!, self.regex)})
            .subscribe(onNext: { (valid) in
                self.button.alpha = valid ? 1 : 0.5
                self.button.isEnabled = valid
            })
            .disposed(by: disposeBag)

        pickerView.rx.itemSelected.subscribe(onNext: { row, value in
            self.regex = getRegex(row)
        }).disposed(by: disposeBag)

所以我首先从 pickerView 中选择正则表达式,然后我正在观察文本变化。当我想先输入文本然后从 pickerView 中选择一些不同的正则表达式时,就会出现问题 - 按钮没有更新,因为没有对文本进行任何更改!

所以我猜我应该以某种方式压缩或合并这两个源(observables?),以便该按钮可以同时观察它们中的每一个的任何变化。

我应该如何解决这个问题?

【问题讨论】:

    标签: swift rx-swift rx-cocoa


    【解决方案1】:

    你搜索过 combineLatest 函数吗?

    我想它会解决你的问题

    你可以通过这个博客了解它:http://adamborek.com/combinelatest-withlatestfrom-zip/

    【讨论】:

      【解决方案2】:

      好的,我解决了它(使用 Abdorahman 提到的 combineLatest)。 我将其发布给其他正在寻找类似内容的人:

              let pickObs = pickerView.rx.itemSelected.map { (row, component) -> String? in
                  return getRegex(row)
              }
      
              Observable.combineLatest(textField.rx.text, pickObs.startWith("?‍♂️")){ text, regex -> Bool in
                  return self.validate(text, regex)
                  }.subscribe(onNext: { (valid) in
                      self.addNewDevice.alpha = valid ? 1 : 0.5
                      self.addNewDevice.isEnabled = valid
                  }).disposed(by: disposeBag)
      

      pickObs.startWith("?‍♂️") 在那里,因为我找不到预选pickerView的方法。 (pickerView.selectRow 没有触发 pickerView.rx.itemSelected 代码块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        相关资源
        最近更新 更多