2017-02-09 47 views
1

我的tableview在我的iOS應用RxSwift過濾器觀察到的序列,並綁定到實現代碼如下

我使用初始化表下面的代碼

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) 

,但我不知道如何過濾cnList和更新table 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

我使用'Observable.just(list)'通過調用'readJson()'方法來轉換'let list = [CountryCode]()'。如何將這個'list'轉換爲'Variable <[CountryCode]>'? – LynAs

+0

'變量(列表)' –

+0

爲了更多的功能可以提高第2部分: 'searchTextField.rx.text .filter {$ 0.characters.count> 0} .subscribe(onNext:{文字 自我.cnList.value = self.cnList.value.filter({//一些邏輯}) }) .addDisposableTo(bag)' – XFreire