RxSwift Beginners Episode 5 - Search TableView with Map and Filer Operators
BehaviorRelay
화BehaviorRelay
내 아이템의 필터링 함수BehaviorRelay
아이템의 테이블 뷰 바인딩을 통한 테이블 뷰 그리기 private func setSearchingTableView() {
searchBar.rx.text.orEmpty
.throttle(.milliseconds(300), scheduler: MainScheduler.instance)
.distinctUntilChanged()
.map { query in
self.tableViewItemsRx.value.filter { foodModel in
if query.isEmpty || foodModel.name.lowercased().contains(query.lowercased()) {
return true
} else {
return false
}
}
}
.bind(to: tableView
.rx
.items(cellIdentifier: "customTableViewCell", cellType: CustomTableViewCell.self)) {
(tv, tableViewItem, cell) in
cell.cellLabel.text = tableViewItem.name
cell.cellImage.image = UIImage(named: tableViewItem.imageName)
}
.disposed(by: disposeBag)
}
throttle
, distinctUntilChange
는 서치 바에 텍스트를 타이핑하는 시간 조정, 변화가 없다면 현 상태를 유지하는 방법map
을 통해 서치 바의 텍스트를, filter
를 통해 매핑된 텍스트를 현재 비교할 전체 아이템의 값과 비교할 수 있는 필터링 기능 제공bind
를 통해 필터링된 아이템만을 테이블 뷰에 바인딩, 즉 타이핑된 텍스트와 일치하는(map
인 true
값을 리턴하는) 아이템만을 그리기기존의 서치 바를 사용하기 위해서는 서치 바 델리게이트 함수를 커스텀하는 등 소모 비용이 컸기 때문에 보다 간편하고, 고급스러워진 코딩이 가능하다!