2017-12-12 5 views
0

変数を監視しようとしていますが、この変数の一部のプロパティが条件に合っているときは、「観測可能な」API呼び出しを作成し、その呼び出しの結果をUI素子。それは私がここにそれを提示する方法を働いているが、私は今、私は、サブスクリプション・メソッドを入れ子にしていますので、それは、より良い方法に実装することができることを考えたよ:条件付きで観測してRxSwiftをバインドする方法

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) 

これを行うには、他の方法はあります?私は最初の観測でフィルタを得ることができますが、私はどのように私は他の1つを呼び出すことができ、UI上でそれをバインドすることを理解していません。

注:わかりやすくするために、他のコード行をいくつか除外しました。

+0

あなたに(バインド 'を見ている:?'関数 –

+0

私はあなたが2人のオブザーバーを持っているべきだと思います:テーブルリロードのための第1、あなたの 'self?.footerView'への新しいデータのバインドの第2です。ちょうど電流の実現を分ける。 –

+0

問題は、同期が必要なことです。新しいイベントが発生したときに、テーブルをリロードしてUI呼び出しをAPI呼び出しのデータで更新する必要があります。 – sheinix

答えて

0

代表的な解決策は、.switchLatest()を次のように使用します。

  • *それにswitchSubject = PublishSubject <観察可能<応答> >()」
  • バインドUIは、最新の値レッツ作成します。)switchSubject.switchLatest(バインド(...
  • アップデート「switchSubject 「新しい要求に:switchSubject.onNext(newServiceCall)
関連する問題