Попробуйте выполнить этот вызов во внешней функции, такой как: Каждый раз, когда вы делаете вызов, если у вас есть результаты, обновляйте свой массив, а затем вызывайте tableView.reloadData()
в конце, чтобы он создал необходимые ячейки для вас.
func makeSearchCall() {
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = locationSearchTextField.text
request.region = mapKitView.region
let search = MKLocalSearch(request: request)
search.start(completionHandler: {(response, error) in
if error != nil{
print("Error occured during search:")
print(error!.localizedDescription)
numberOfResults = 0
tableView.isHidden = true
return
}else if response!.mapItems.count == 0{
print("No results found")
numberOfResults = 0
tableView.isHidden = true
return
}else{
print("Results found")
matchingItems = (response?.mapItems)!
numberOfResults = matchingItems.count
tableView.numberOfRows(inSection: numberOfResults)
tableView.reloadData()
}
})
}
Тогда в вашем cellForRowAt
методе:
guard let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell") as? CustomTableViewCell else {return UITableViewCell()}
cell.nameLabel.text = matchingItems[indexPath.row].placemark.name
return cell
Также в вашем numberOfRowsInSection
методе:
return matchingItems.count