RxSwift过滤可观察序列并绑定到tableview

时间:2017-02-09 08:42:40

标签: ios swift swift3 rx-swift

我的iOS App中有tableview

我使用以下代码初始化表

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

那怎么办?

1 个答案:

答案 0 :(得分: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)

我不确定,但是应该用新值重新加载你的表格。