var distances = [ String ]()
var places : Results<Place>?
Затем в tableView(_:cellForRow:)
cell.address.text = (places![indexPath.row]["name"] as! String)
cell.distance.text = distances[indexPath.row]
Только не делай этого. Эта информация должна быть синхронизирована.
Вместо этого используйте другой класс / структуру или расширение, которое будет содержать расстояние и место.
var array: [PlaceModel]
struct PlaceModel {
let place: Place
let distance: Double //You can use String, but that's bad habit
//Might want to add the "image link" also?
}
In load()
:
array.removeAll()
let tempPlaces = selectedTrip.places.sorted(byKeyPath: "name", ascending: true)
for aPlace in tempPlaces {
let distance = //Calculate distance for aPlace
array.append(PlaceModel(place: aPlace, distance: distance)
}
Сейчас, в tableView(_:cellForRow:)
:
let aPlaceModel = array[indexPath.row]
if activePlace == indexPath {
let cell = tableView.dequeue...
//Use cellWithImage for that place
return cell
} else {
let cell = tableView.dequeue...
cell.address.text = aPlaceModel.place.name
cell.distance.text = aPlaceModel.distance
return cell
}
И сохраняйте эту логику, где хотите, если, если нужно, heightForRow (если вы хотите, например, чтобы все ваши изображения были на 80pt, а остальные на 44pt и т. Д.)
В tableView(_:didSelectRowAt:)
, добавьте tableView.reloadData()
или лучше tableView.reloadRows(at: [indexPath] with: .automatic)
Примечание: код не тестировался, может не компилироваться, но вы должны понять.