Я пытаюсь отфильтровать массив из UISearchController, но это не удалось. Моя первая попытка - я пытаюсь создать два массива: первый массив предназначен для хранения данных, а второй массив - для хранения фильтра. чем сделать мой numberOfRowsInSection массивом фильтров, но он все еще не работает, что пошло не так? вот мой код.
// This is in my PopularViewController
let store = PopularStore()
var timer: Timer?
var page = 1
var hasMoreMovies = true
let dataSource = PopularDataSource()
override func viewDidLoad() {
super.viewDidLoad()
fetchMovie(page: page)
}
private func fetchMovie(page: Int) {
showLoadingView()
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false, block: { _ in
self.store.fetchMovie(page: page, completion: { [weak self] result in
guard let self = self else { return }
self.dismissLoadingView()
switch result {
case .success(let movies):
if movies.count < 100 { self.hasMoreMovies = false }
self.dataSource.items.append(contentsOf: movies)
case .failure(let error):
print(error)
}
self.tableView.reloadSections(IndexSet(integer: 0), with: .none)
})
})
}
extension PopularViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if !searchText.isEmpty {
dataSource.filterMovie = dataSource.items.filter({ $0.title.lowercased().contains(searchText.lowercased() )})
dataSource.filterMovie = dataSource.items
}
}
}
// This is in my UITableViewDataSource
class PopularDataSource: NSObject, UITableViewDataSource {
var items = [Movie]()
var filterMovie = [Movie]()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filterMovie.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: PopularCell.cellID, for: indexPath)
return cell
}
}