使用来自 RxSwift 变量的搜索栏过滤集合视图



我刚刚开始实现RxSwift。

我有以下函数来动态填充从 Firebase 观察调用返回的用户的集合视图,但我正在努力根据搜索栏中的任何潜在条目动态过滤用户。

Rx 集合视图绑定:

private func bind() {
    viewModel.users.asObservable()
        .bind(to: nearbyCollectionView.rx.items(cellIdentifier: "NearbyCell", cellType: NearbyCell.self)) {
            row, user, cell in
            cell.configureCell(user: user)
        }.disposed(by: disposeBag)
}

我应该返回到默认的 collectionView 实现并简单地使用 Rx 来动态更新 collectionView 对象,还是有更好的方法来做到这一点?

我的旧实现使用了以下内容:

            if self.viewModel.inSearchMode {
            user = self.viewModel.filteredUsers[indexPath.row]
            cell.configureCell(user: user)
        } else {
            user = self.viewModel.users[indexPath.row]
            cell.configureCell(user: user)
        }

非常感谢任何帮助!!

您可以使用 combineLatest 来过滤它们

let searchString = searchTextField.rx.text
let filteredUsersObservable = Observable.combineLatest(searchString, viewModel.users, resultSelector: { string, users in
            return users.filter { $0 == string }
        })
filteredUsersObservable
    .bind(to: nearbyCollectionView.rx.items(cellIdentifier: "NearbyCell", cellType: NearbyCell.self)) {
        row, user, cell in
        cell.configureCell(user: user)
    }.disposed(by: disposeBag)

我不确定语法是否完全正确,但这个想法是每次文本字段发生变化时都会获得信号,使其成为可观察的,并与用户可观察的过滤器一起过滤。

最新更新