2016-03-28 3 views
-1

Итак, я пытаюсь сортировать ячейки по расчёту расстояния. У меня есть 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 }) 

Но это не сработало

+0

Вы не сортируете _cells_. Вы сортируете данные _model и перезагружаете представление таблицы. 'cellForRowAtIndexPath' - это _not_ место для этой сортировки; это должно быть сделано по данным модели заранее. – matt

+0

Так что мне нужно добавить расстояние как-то к структуре, а затем отсортировать его из моего массива, который я создал, не так ли? Если это имеет смысл – luke

+0

Вы не объясняете, что такое 'sals', но я предполагаю, что это массив Sal. Итак, да, вы просто отсортировали бы этот массив. Но вы не сделали бы этого в «cellForRow». – matt

ответ

1

Rewrite Sal так, что он содержит свой расчет расстояния выполните следующие действия:

struct Sal { 
    var name:String 
    var coordinatesLat: CLLocationDegrees 
    var coordinatesLong: CLLocationDegrees 
    func distanceFromLocation(location: CLLocation) -> CLLocationDistance { 
     // ... 
    } 
} 

Теперь у вашего массива Sal есть функция Sal, которую вы можете сортировать.

+0

Я пытался это реализовать, но я слишком уверен, как я сделаю это для меня, чтобы иметь возможность сортировать их по расстоянию – luke

+0

Я не знаю, что означает «по расстоянию». На расстоянии от _what_? – matt

+0

Предположим, вы имеете в виду расстояние от некоторого общего местоположения 'loc'. Тогда вы сказали бы: 'sals.sortInPlace {$ 0.distanceFromLocation (loc) <$ 1.distanceFromLocation (loc)}' – matt

Смежные вопросы