代码之家  ›  专栏  ›  技术社区  ›  Gorib Developer

如何在rxswift中从数组绑定选择器?

  •  0
  • Gorib Developer  · 技术社区  · 7 年前

    func updatedPharmacyList() -> Observable<[String]>

    将数据追加到数组中。 self.newArray.append((pharmacy?.name)!)

    func updatedPharmacyList() -> Observable<[String]> {
        return Observable.just(self.newArray)
    }
    

    然后在viewcontroller中像这样绑定picker

    viewModel.updatedPharmacyList()
      .bind(to: pharmacyPicker.rx.itemTitles) { _, item in
        return item
      }
      .disposed(by: disposeBag)
    

    3 回复  |  直到 7 年前
        1
  •  1
  •   Prabhjot Singh Gogana    7 年前

    好吧,你的代码应该可以工作,用subscribe方法检查你的observate是否工作。

    viewModel.updatedPharmacyList().subscribe {print($0.element)}
    

    let adaptor = RxPickerViewStringAdapter<[String]>( components: [],
                                                           numberOfComponents: { _,_,_  in 2 },
                                                           numberOfRowsInComponent: { (_, _, _, component) -> Int in
                                                            return (component == 0) ? self.model?.arrayForFirst.value.count ?? 0 : self.model?.arrayForSecond.value.count ?? 0 },
                                                           titleForRow: { (_, _, items, row, component) -> String? in
                                                            return (component == 0) ? self.model?.arrayForFirst.value[row] : self.model?.arrayForSecond.value[row]}
        )
    model?.arrayForFirst.asObservable()
            .bind(to: self.pickerViewPS.rx.items(adapter: adaptor)).disposed(by: self.bag)
    

    为此,必须导入RxDataSources。

        2
  •  0
  •   Daniel T.    7 年前

    Observable.just(self.newArray) 按当时的状态发射数组,然后发射一个已完成的事件。在此之后向数组中添加某些内容将不会被注意到。

    最好的解决方案是绑定生成药房列表的结果。“部分接收”的解决方案是 newArray BehaviorRelay 然后把它绑在药瓶上。)然后当你 accept 将一个新的数组放入行为中继中,它会将更改通知选择器。

        3
  •  0
  •   Maxim Volgin    7 年前

    Rx picker接受数组作为数据,即您需要 Observable<[[String]]>

    推荐文章