2016-12-15 53 views
0

感谢您的未来帮助!这是我的结构数组:使用Swift对tableView进行排序问题

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

覆盖FUNC 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(from:coords)/ 1000 let distanceInMetersString = String(format: “%.1f”,distanceInMeters) mall.distance = distanceInMetersString +“км” malls [index] = mall –

+0

我真的很感谢您的帮助,谢谢,但我无法理解我在这里做错了什么,我有问题与地址mall结构,我想..你可以再次看代码?谢谢,真的 当var mall = malls [index] in viewDidLoad –

0

你的排序代码就好了。把它放在委托方法之外。

什么是具有for循环委托方法

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的所有对象的距离属性里面的点。

如果你想分拣,请做排序编码外面的tableView委托方法。并且删除上面提到的for循环。而刚刚整理后重新装载实现代码如下:)

+0

谢谢你的帮助,真的,是不能用类型'(Any) - > Int'的索引来标记'[Mall]'类型的值的 它是什么意思? (请看帖子)但是它是 '当var mall = malls [index]'in viewDidLoad –

+0

@DimitriyChigarikhin:In'时,不能为类型为'(Any) - > Int'的索引添加'[Mall]你的viewDidLoad方法,第一行是var mall = malls [index]。你在哪里宣布索引。我不能看到环控制研究指数比其他任何变量指标。 – kunjus