我从核心数据实体填充了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)"
现在,我如何按距离当前位置对位置进行排序。
我可以轻松按名称或核心数据中存储的任何值进行排序,但需要根据检索到的数据计算距离,当我进行计算时,它将会延迟,因此对单元格进行排序
如果可以,请帮忙
非常感谢您提前
答案 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
}
}