繁体   English   中英

无法使用RxSwift / RxRealm过滤对象

[英]Unable to filter objects with RxSwift/RxRealm

我是反应式编程的新手,在从特定索引过滤和访问对​​象时遇到困难。 以下是我的代码段。

    private var contacts: Observable<(AnyRealmCollection<Contact>, RealmChangeset?)>!

        override func viewDidLoad() {
            super.viewDidLoad()

            contacts = Observable.changeset(from: contactViewModel.getDeviceContacts())
            let dataSource = RxCollectionViewRealmDataSource<Contact>(cellIdentifier: "SendFeedContactCell", cellType: ContactCollectionCell.self) {cell, ip, contact in
                cell.configure(contact)
            }

            contacts
                .bindTo(collectionView.rx.realmChanges(dataSource))
                .addDisposableTo(disposeBag)

            searchBar
                .rx.text
                .orEmpty
                .subscribe(onNext: { [unowned self] query in
                    // Filter query - doesn't work!
                    // self.contacts.filter({ (observable) -> Bool in
                    // observable.0.filter(NSPredicate(format: "name CONTAINS[c] '\(query)'"))
                    // })
                })
                .addDisposableTo(disposeBag)  

            collectionView.rx.itemSelected
            .subscribe(onNext: { indexPath in
                // TODO: How to access a specific object from the contacts object
            })
            .addDisposableTo(disposeBag)
        }
  1. 我在搜索栏中收到查询,但过滤似乎不起作用。

  2. 当在集合视图中选择一个项目时,我得到了IndexPath,但是我想知道如何根据索引路径访问特定的模型属性。

我正在使用RxRealmRxRealmDataSources,因为我的数据存储在设备的领域数据库中。

1)关于第一个问题:您不能强制性地过滤可观察对象。 您试图将其用作数组,但是可观察对象没有可在任意时间过滤的“值”。 要过滤绑定到表视图的集合,您需要过滤领域结果,该结果是可观察到的contacts的来源。

例如,您需要重新创建可观察的contacts ,并将此新的可观察对象绑定到表视图。

关于如何使用Rx过滤表视图,这里有一个类似(但不完全)的示例: https : //realm.io/news/marin-todorov-realm-rxswift/

2)您正在使用rx.itemSelected ,它为您提供了索引路径。 如上所述,Observable不是可以以任意方式访问的数组,因此您无法执行任何操作。 您可以改用rx.modelSelected ,它将直接为您提供相应的对象(而不是索引路径)。 您可以在此处查看有关modelSelected更多信息modelSelected : //github.com/ReactiveX/RxSwift/blob/master/RxCocoa/iOS/UICollectionView%2BRx.swift#L231

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM