Итак, я пытаюсь сортировать ячейки по расчёту расстояния. У меня есть STRUCTСортировка ячеек по расстоянию
struct Sal {
var name:String
var coordinatesLat: CLLocationDegrees
var coordinatesLong: CLLocationDegrees
//var distance?
}
в сцене A
func distanceFromLocation(location: CLLocation) -> CLLocationDistance {
// Find lat and long coordinates of current location
let getLat = self.location.latitude
let getLon = self.location.longitude
let currentLocation = CLLocation(latitude: getLat, longitude: getLon)
// Calculate distance from current location to sal
let distance = currentLocation.distanceFromLocation(location)
return distance
}
сцены B
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! SalCustomCell
let name = sals[indexPath.row].name
cell.name.text = name
// Calculate distance between current location and sal
let salLocation = CLLocation(latitude: sals[indexPath.row].coordinatesLat, longitude: sals[indexPath.row].coordinatesLong)
// Display distance in cell.
let distanceM = viewController.distanceFromLocation(salLocation)
let distanceKm = round(distanceM/1000)
cell.distance.text = String(distanceKm) + "km"
return cell
}
Я вызывать функции из сцены A, чтобы отобразить расстояние в км в сцене B. Я пытаясь отсортировать их по расстоянию, отображаемому в ячейке, но я не уверен, как я буду сортировать их. Если бы это было имя я мог бы просто сделать
sals.sortInPlace ({ $0.name < $1.name })
, но я не могу сделать
sals.sortInPlace ({ $0.distance < $1.distance })
, потому что это не обособленно структуры. Нужно ли делать это отдельно от структуры? Если да, то как?
Я также пытался создать пустой массив и добавить расстояние в массив для сортировки этак
var distance = [Double]()
self.distance.append(distanceKm) // inside cellForRowAtIndexPath
distance.sortInPlace ({ $0 < $1 })
Но это не сработало
Вы не сортируете _cells_. Вы сортируете данные _model и перезагружаете представление таблицы. 'cellForRowAtIndexPath' - это _not_ место для этой сортировки; это должно быть сделано по данным модели заранее. – matt
Так что мне нужно добавить расстояние как-то к структуре, а затем отсортировать его из моего массива, который я создал, не так ли? Если это имеет смысл – luke
Вы не объясняете, что такое 'sals', но я предполагаю, что это массив Sal. Итак, да, вы просто отсортировали бы этот массив. Но вы не сделали бы этого в «cellForRow». – matt