使用来自 RxSwift 变量的 searchBar 过滤 collectionView
Filtering a collectionView with a searchBar from a RxSwift Variable
我刚刚开始实施 RxSwift。
我有以下函数可以动态填充 collectionView 用户 returned 从 Firebase 观察调用,但我正在努力根据 searchBar 中的任何潜在整体动态过滤用户.
Rx collectionView 绑定:
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)
}
我应该return使用默认的 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 { [=10=] == string }
})
filteredUsersObservable
.bind(to: nearbyCollectionView.rx.items(cellIdentifier: "NearbyCell", cellType: NearbyCell.self)) {
row, user, cell in
cell.configureCell(user: user)
}.disposed(by: disposeBag)
我不确定语法是否完全正确,但我的想法是在每次文本字段发生变化时获取信号,将其作为可观察对象并使用用户可观察对象进行过滤。
我刚刚开始实施 RxSwift。
我有以下函数可以动态填充 collectionView 用户 returned 从 Firebase 观察调用,但我正在努力根据 searchBar 中的任何潜在整体动态过滤用户.
Rx collectionView 绑定:
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)
}
我应该return使用默认的 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 { [=10=] == string }
})
filteredUsersObservable
.bind(to: nearbyCollectionView.rx.items(cellIdentifier: "NearbyCell", cellType: NearbyCell.self)) {
row, user, cell in
cell.configureCell(user: user)
}.disposed(by: disposeBag)
我不确定语法是否完全正确,但我的想法是在每次文本字段发生变化时获取信号,将其作为可观察对象并使用用户可观察对象进行过滤。