ios - 如何使用 RxSwift、RxRealmDataSources 和 UISearchController 过滤结果?

标签 ios swift realm uisearchcontroller rx-swift

我正在将 RxSwift 与 RxRealm 和 RxRealmDataSources 一起使用。我的 Realm 对象绑定(bind)到 TableView 。我正在尝试找到一种根据在搜索栏中输入的查询来过滤它的方法。你们有人做过这样的事吗?

class ItemsViewController: UITableViewController {

    let bag = DisposeBag()
    let searchController = UISearchController(searchResultsController: nil)
    let search = BehaviorSubject(value: "")

    override func viewDidLoad() {
        super.viewDidLoad()
        searchController.searchResultsUpdater = self
        definesPresentationContext = true
        tableView.tableHeaderView = searchController.searchBar
        bindTableView()
    }

    func bindTableView() {
        let dataSource = RxTableViewRealmDataSource<Item>(cellIdentifier: "itemCell", cellType: UITableViewCell.self) { cell, ip, item in
            cell.textLabel?.text = item.uuid
        }
        Observable.changeset(from: DataStore.sharedInstance.getObjects(Item.self))
            .bind(to: tableView.rx.realmChanges(dataSource))
            .addDisposableTo(bag)
    }

}

extension ItemsViewController: UISearchResultsUpdating {

    public func updateSearchResults(for searchController: UISearchController) {
        search.onNext(searchController.searchBar.text ?? "")
    }

}

最佳答案

最简单的方法是:

func bindTableView() {
    let dataSource = RxTableViewRealmDataSource<Item>(cellIdentifier: "itemCell", cellType: UITableViewCell.self) { cell, ip, item in
        cell.textLabel?.text = item.uuid
    }
    search.asObservable()
        .map { text in DataStore.sharedInstance.getObjects(Item.self).filter("someProperty == %@", text) }
        .flatMap { results in Observable.changeset(from: results) }
        .bind(to: tableView.rx.realmChanges(dataSource))
        .addDisposableTo(bag)
}

关于ios - 如何使用 RxSwift、RxRealmDataSources 和 UISearchController 过滤结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46338515/

相关文章:

swift - 本地 Swift 字典引用

ios - 核心蓝牙 setNotifyValue 未将 CBCharacteristics 通知属性设置为 true

ios - 排序快速插入的 Realm 记录

objective-c - Realm 中的条件 WHERE RLMSupport

ios - 为不受支持的语言选择本地化

ios - 类型 'Any' 没有下标成员 Swift 3

iOS FirebaseCloudMessaging 通知在调试/测试飞行或发布中不起作用

ios - 在 iOS 中保存音频 After Effects

ios - 如何完全销毁并重新创建 Realm 数据库

ios - IOS上使用CFSocket的UDP广播