홈>
스코프 버튼 필터를 클릭 한 후 실제 결과가있는 것과 다른 배열과 같은 두 개의 다른 데이터 소스로 테이블 뷰를 바인딩하고 있습니다.
func bind() {
self.searchBar.rx.searchButtonClicked
.throttle(0.3, scheduler: MainScheduler.instance)
.flatMapLatest { [weak self] _ -> Observable<[String]> in
guard let `self` = self else { return .just([]) }
guard let query = self.searchBar.text else { return .just([]) }
self.view.endEditing(true)
self.loadingText.isHidden = false
let items = self.githubService.search(query: query)
self.githubService.searchItems = items
return items
}
.bind(to: self.tableView.rx.items(cellIdentifier: "cell")) { row, name, cell in
self.loadingText.isHidden = true
cell.textLabel?.text = name
}
.disposed(by: self.disposeBag)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.frame = self.view.bounds
}
}
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
//filterContentForSearchText(searchBar.text!, scope: searchBar.scopeButtonTitles![selectedScope])
let filteredResult = self.githubService.filteredSearch(index: selectedScope)
filteredResult
.bind(to: self.tableView.rx.items(cellIdentifier: "cell")) { row, name, cell in // Getting crash here
self.loadingText.isHidden = true
cell.textLabel?.text = name
}
.disposed(by: self.disposeBag)
}
필터에 사용하는 방법입니다.
func filteredSearch(index:Int) -> Observable<[String]> {
guard index > 0 else { return .just([]) }
return searchItems!.filter { $0.contains("a")}
}
- 답변 # 1
관련 질문
- ios : RxSwift를 사용하여 2개의 사용자 지정 셀을 교대로 표시 등록하는 방법
- ios : MVVM + RXSwift+ 코디네이터는 어떻게 데이터를 설정합니까?
- ios : MVVM을 사용하여 JSON을 모델로 디코딩
- ios : spriteKit을 사용하여 신속하게 원을 그리는 방법은 무엇입니까?
- ios : Gesturer Recognizer 이전에 UIResponder를 어떻게 넣을 수 있습니까?
- ios : 건강 키트 -내 건강 데이터와 함께 공유 건강 데이터 가져오기
- Xcode(iOS 앱)는 개인 저장소에서 호스팅되는 swift 패키지를 어떻게 사용할 수 있습니까?
- ios : ViewDidLoad를 호출하는 ViewController 간에 분리하는 방법
- ios : View Model을 전달하여 ViewController 초기화하기
- 디스패치 및 _synchronized_subscribe RxSwift
이 오류는 명백하다. 2 개의 서로 다른 데이터 소스를 가질 수 없다. 대신 datSource의 내용을 두 데이터 세트간에 변경할 수 있습니다.
RxDataSources
를 사용하는 것이 좋습니다