2016-12-15 5 views
1

Благодарим вас за помощь в будущем! Это мой массив:Сортировать по расстоянию Swift 3

var malls: [Mall] = [ 
    Mall(name:"yagey", distance:""), 
    Mall[name:"tigey", distance:"") 
] 

Как я могу сортировать торговые центры по mall.distance? Это мой Tableview

Tableview

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! EateriesTableViewCell 
    let mall = mallToDisplayAt(indexPath: indexPath) 
    let mallLocate = CLLocation(latitude: mall.latitude, longitude: mall.longitude) 
    print (mallLocate) 

    let distanceInMeters = mallLocate.distance(from: coords)/1000 

    let distanceInMetersString = String(format: "%.1f", distanceInMeters) 

    for index in 0..<malls.count { 
     var mall = malls[index] // copy a mall value 
     mall.distance = distanceInMetersString // change the copy of mall 
     malls[index] = mall // put the updated mall back into the array 
    } 

    cell.distanceLabel.text = distanceInMetersString + "км" 
    malls.sort() { $0.distance < $1.distance } 
    print (mall.distance) 


    return cell 
} 
+3

Почему вы делаете сортировку в cellViewRotAt стола TableView? он запускается один раз каждый раз, когда строка становится видимой. Это не нужно. А также вы ссылаетесь на торговый центр из торговых центров - предполагая, что это то, что делает mallToDisplayAt, прежде чем сортировать его, что даст вам значение из несортированного массива с первого раза, когда он вызывается. Наконец, расстояние сохраняется в строке, чтобы получить точное сравнение во время сортировки, вам нужно сравнить значение float/int во время сортировки вместо строки, поскольку сравнение строк будет сравнивать char по char (12 меньше, чем 2, поскольку первый символ меньше) –

+0

Это четвертый вопрос, который вы опубликовали сегодня по той же самой проблеме. Перестань. Придерживайтесь одного вопроса. Я сказал вам, что делать в вашем первом вопросе. Если у вас возникли проблемы с его работой, отредактируйте свой вопрос, чтобы показать свой новый код в конце и указать проблему, с которой вы столкнулись. –

+0

Я должен сказать, что вы, кажется, находитесь над вашей головой. Вы не понимаете простых советов, как «сделать местоположение собственностью». Если вы все еще изучаете основы Swift, вы вряд ли сможете получить что-то такое же сложное, как создание табличного представления местоположений, отсортированных по расстоянию до местоположения пользователя, до тех пор, пока вы не начнете намного больше изучать. –

ответ

1

Сортировать торговые центры, а затем использовать его в качестве источника данных Tableview, в TableView покажет клетки, отсортированные в порядке в массиве отсортирован центры:

let sortedMalls = malls.sorted { (mallOne, mallTwo) -> Bool in 
     return mallOne.distance < mallTwo.distance 
    } 

Также один лайнер:

let sortedMalls = malls.sorted { $0.mallOne.distance < $1.mallTwo.distance } 

Использование отсортированныхMalls fo r:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
+0

@ DuncanC, прокомментировал в неправильном положении? –

+0

Yup. Извини за это. Теперь перейдем к вопросу. –

+0

@YUNCHEN Что значит «использовать отсортированные карты»? Прости. Это мой последний вопрос перед чтением книги) – dmarinkin

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