Никогда не получайте данные из представления , ячейки, всегда получайте их из модели , источника данных.
И никогда использовать dequeueReusableCell
за пределами cellForRowAt
. Вы не получите ожидаемую клетку.
В этом случае вы должны получить данные в зависимости от searching
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let labelContent : String
if searching {
labelContent = searchedFoods[indexPath.row].title
} else {
labelContent = foods[indexPath.row].title
}
print(labelContent)
}
А твой filter
метод ужасен. Измените его на гораздо более эффективный
searchedFoods = foods.filter { $0.title.range(of: searchText, options: [.caseInsensitive, .anchored] != nil) }
Наконец, я рекомендую изменить textDidChange
, чтобы отменить поиск также, если текст поиска становится пустым, и удалить неиспользуемые элементы из searchedFoods
.
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
searchedFoods.removeAll()
searching = false
} else {
searchedFoods = foods.filter{ $0.title.range(of: searchText, options: [.caseInsensitive, .anchored]) != nil }
searching = true
}
tableView.reloadData()
}