2017-02-09 7 views
1

に結合し、私は次のコードRxSwiftフィルタ、観察シーケンスと私は私のiOSのApp</p> <p>でテーブルビューを持つテーブルビュー

var cnList : Observable<[CountryCode]>? 
override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
    cnList = readJson() 
     cnList?.bindTo(cTableView.rx.items(cellIdentifier: "country_code_cell")) { 
      _, countryCode, cell in 
      if let countryCodeCell = cell as? CountryCodeTableViewCell { 
       countryCodeCell.cNameLabel.text = countryCode.name 
       countryCodeCell.cCodeLabel.text = countryCode.dial_code! 
      } 
     }.addDisposableTo(disposeBag) 
} 

を使用してテーブルを初期化している今、私は、テキストフィールドを持っていると私はCLISTをフィルタリングしますそのテキストフィールドのテキストに基づいて

私は私が押してテキストを印刷することができ、キー

searchTextField.rx.text.asObservable().subscribe(onNext: { 
      text in 
      if text != nil && text != "" { 
       // need to filter cnList and update tableview here i think but how ?? 
      } 
     }).addDisposableTo(disposeBag) 

しかし、私はどのようにフィルタリングするのかわかりませんcnListtable view

これを行う方法は?多分このような

答えて

2

まず変更var cnList : Observable<[CountryCode]>?その後、var cnList : Variable<[CountryCode]>? = Variable([])

に:

override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
    cnList.value = readJson() 
     cnList?.asObservable().bindTo(cTableView.rx.items(cellIdentifier: "country_code_cell")) { 
      _, countryCode, cell in 
      if let countryCodeCell = cell as? CountryCodeTableViewCell { 
       countryCodeCell.cNameLabel.text = countryCode.name 
       countryCodeCell.cCodeLabel.text = countryCode.dial_code! 
      } 
     }.addDisposableTo(disposeBag) 
} 

その後:

searchTextField.rx.text.asObservable().subscribe(onNext: { 
      text in 
      if text != nil && text != "" { 
       self.cnList.value = self.cnList.value.filter({//some logic}) 
      } 
     }).addDisposableTo(disposeBag) 

私はわからないんだけど、それはあなたをリロードする必要があります新しい値を持つテーブル。

+0

'readJson()'メソッドを呼び出して 'Observable.just(list)'を使って 'let list = [CountryCode]()'を変換しています。この 'list'を'変数<[CountryCode]> 'に変換する方法は? – LynAs

+0

'変数(リスト)' –

+0

あなたは第二の部分を向上させることができ、より機能的には: 'searchTextField.rx.text .filter {$ 0.characters.count> 0} .subscribe(onNext: 自己中{テキスト.cnList.value = self.cnList.value.filter({// some logic}) }) .addDisposableTo(bag) ' – XFreire

関連する問題