Наиболее эффективный способ фильтрации пользовательских классов - это использование того же типа для массива источника данных и отфильтрованного массива
var caseListOfBooker = [CaseDetails]()
var filteredBooker = [CaseDetails]()
Добавить свойство isFiltering
, для которого задано значение true, когда текст поиска не пустой
var isFiltering = false
и удалить searchString
и filteredString
var searchString:String=""
var filteredString = [String]()
В updateSearchResults
фильтровать массив источника данных (с собственными функциями Swift), установить isFiltering
соответственно и перезагрузить представление таблицы
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
print("searchText \(searchText)")
updateSearchResults(searchText: searchText)
}
func updateSearchResults(searchText: String) {
if searchText.isEmpty {
filteredBooker.removeAll()
isFiltering = false
} else {
filteredBooker = caseListOfBooker.filter{$0.person_of_interest.range(of: searchText, options: .caseInsensitive) != nil }
isFiltering = true
}
tableview.reloadData()
}
В табличном представлении методы источника данных отображают данные в зависимости от isFiltering
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return isFiltering ? filteredBooker.count : caseListOfBooker.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableview.dequeueReusableCell(withIdentifier: "POIProfileDetailsCell", for: indexPath) as! POIProfileDetailsCell
let booker = isFiltering ? filteredBooker[indexPath.row] : caseListOfBooker[indexPath.row]
cell.poiName.text = booker.person_of_interest
}