在Swift中按距离排序UItableview

时间:2015-04-21 09:32:24

标签: swift sorting distance

我从核心数据实体填充了UITableView,以显示位置名称以及这些位置的纬度和长度。

我设法计算了从用户到存储位置的距离并显示了距离。

        var templat = NSString(string: location.lat)
        var templong = NSString(string: location.long)
        var distinationCoords: CLLocation =  CLLocation(latitude: templat.doubleValue, longitude: templong.doubleValue)
        var distance: CLLocationDistance = distinationCoords.distanceFromLocation(mypoi.sharedlocation)
        classdistance = distance / 1000

        cell.customCellSubTitle?.text = "\(distance)"

现在,我如何按距离当前位置对位置进行排序。

我可以轻松按名称或核心数据中存储的任何值进行排序,但需要根据检索到的数据计算距离,当我进行计算时,它将会延迟,因此对单元格进行排序

如果可以,请帮忙

非常感谢您提前

1 个答案:

答案 0 :(得分:0)

例如,您的tableview由具有结构的数据列表填充:

struct Position {
    var latitude : Double
    var longitude: Double
    //you add a function to compare a position to another
    func getDistance(CLLocation current) -> double {
        //calculate the distance here
    } 
}

然后,你的职位列表

var positions = ... the list of positions ...
positions.sort({$0.getDistance(currentPos) > $1.getDistance(currentPos)})

这里的想法是在swift中使用Array的.sort功能来对列表进行排序。您必须定义.getDistance()才能正确排序数组。

如果您有一个NSManagedObject来获取tableviewcell,您可以使用扩展来将getDistance添加到NSManagedObject。 例如,您的类名为'Foo'(包含名称,纬度,经度,时间戳),您可以添加类似

的扩展名
extension Foo {
    func getDistance(CLLocation current) {
        //your calculation using Location API
    } 
}