2016-12-15 3 views
0

Благодарим вас за помощь в будущем! Это моя структура массива:Проблемы с сортировкой в ​​таблицеView с Swift

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

переопределение функ viewDidLoad() { super.viewDidLoad()

var mall = malls[index] 

    let mallLocate = CLLocation(latitude: mall.latitude, longitude: mall.longitude) 

    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 
    } 

    malls.sort() { $0.distance < $1.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) 
    cell.distanceLabel.text = distanceInMetersString + "км" 
    return cell 
} 

ответ

0

вам придется сортировать массив центров первой в viewdidload, например, затем после сортировки перезарядить tableviews данные

self.tableView.reloadData() 

и в вашей камере для строки будет выглядеть следующим образом:

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

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

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

cell.distanceLabel.text = distanceInMetersString + "км" 
print (mall.distance) 


return cell 

}

+0

пожалуйста, смотрите код я отправляю снова ,, это не работает слишком –

+0

вы устанавливаете значение расстояния торгового центра во все объекте с тем же значением торгового центром. расстояние = distanceInMetersString // изменить копию торгового вы должны повторно вычислить расстояние мола для каждого объект вара молл = центров [индекс] // скопировать значение мола пусть mallLocate = CLLocation (широта: mall.latitude, долгота : mall.longitude) let distanceInMeters = mallLocate.distance (из: coords)/1000 let distanceInMetersString = String (формат: «% .1f», distanceInMeters) mall.distance = distanceInMetersString + «км» Торговые центры [index] = торговый центр –

+0

Я очень ценю вашу помощь, спасибо, но я не могу понять, что я делаю неправильно здесь, я у меня проблемы с адресом в структуре торгового центра, я думаю .. Можете ли вы снова просмотреть код? Спасибо, действительно Невозможно подстроить значение типа '[Mall]' с индексом типа '(Any) -> Int' , когда var mall = торговые центры [index] in viewDidLoad –

0

Ваш код сортировки просто отлично. Поместите его вне метода делегата.

Какой смысл иметь этот цикл внутри метода делегата

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 
    } 

Здесь вы устанавливаете расстояние свойства всех объектов в массиве distanceInMetersString.

Если вы хотите сортировать, пожалуйста, сделайте кодировку вида наружный столПросмотреть методы делегата. И удалите цикл for, упомянутый выше. И после сортировки просто перезагрузить TableView :)

+0

спасибо за вашу помощь, действительно, это это то, что вы имеете в виду? (см. сообщение), но это 'Невозможно подстроить значение типа '[Mall]' с индексом типа '(Any) -> Int', когда var mall = malls [index]' in viewDidLoad –

+0

@DimitriyChigarikhin: In ваш метод viewDidLoad, первая строка - var mall = malls [index]. где вы объявляете индекс.Я не мог видеть какой-либо переменный индекс, отличный от индекса управления циклом for. – kunjus