适用于iOS的漂亮打印距离

时间:2011-12-19 22:44:12

标签: iphone objective-c ios core-location cllocationmanager

我有两个CLLocation对象,我希望以漂亮漂亮的格式显示它们之间的距离。像“22英尺”,“58码”或“2.3英里”

CLLocation *location1 = [[CLLocation alloc] initWithLatitude:42.333297 longitude:-71.588858];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:42.353297 longitude:-71.578858];

float target = [location1 getDistanceFrom:location2];

基本上,iOS库中有什么东西可以将距离转换成漂亮的字符串,还是我必须手动执行此操作?

6 个答案:

答案 0 :(得分:44)

iOS 7(和OS X 10.9)引入了MKDistanceFormatter,它可以完全满足您的需求:

CLLocationDistance distance = 1320.0;
MKDistanceFormatter *df = [[MKDistanceFormatter alloc]init];
df.unitStyle = MKDistanceFormatterUnitStyleFull;

NSString *prettyString = [df stringFromDistance:distance];

Swift版本:

let distance = 1320.0
let df = MKDistanceFormatter()
df.unitStyle = .Full

let prettyString = df.stringFromDistance(distance)

答案 1 :(得分:18)

我只想注意一点,就像发布 iOS8 一样,对于这类问题会有新的NSFormatters

NSLengthFormatterNSMassFormatterNSEnergyFormatter非常容易使用 - 请参阅此iOS8 NSFormatter tutorial。以下是使用带有swift的LengthFormatter的示例:

let lengthFormatter = LengthFormatter()
print("Kilometer: ", lengthFormatter.string(fromValue:1000, unit: .kilometer)) //Kilometer: 1,000 km

与DateFormatter一样,您不再需要使用NSLocale来打印设备本身。

答案 2 :(得分:12)

不幸的是,您必须手动执行此操作。

如果你这样做,请不要忘记检查:

[[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue]

世界其他地方会很感激。

答案 3 :(得分:4)

来自TTTLocationFormatter

FormatterKit可能正是您所寻找的。如果不是,你可以用它作为起点。

答案 4 :(得分:1)

import Foundation

extension Double {
  var prettyDistance: String {
    guard self > -.infinity else { return "?" }

    let formatter = LengthFormatter()
    formatter.numberFormatter.maximumFractionDigits = 2

    if self >= 1000 {
      return formatter.string(fromValue: self / 1000, unit: LengthFormatter.Unit.kilometer)
    } else {
      let value = Double(Int(self))
      return formatter.string(fromValue: value, unit: LengthFormatter.Unit.meter)
    }
  }
}

Double(1).prettyDistance // 1 m
Double(10).prettyDistance // 10 m
Double(100).prettyDistance // 100 m
Double(999).prettyDistance // 999 m
Double(1000).prettyDistance // 1 km
Double(1111).prettyDistance // 1.11 km
Double(5555).prettyDistance // 5.56 km
Double(9999).prettyDistance // 10 km
Double(10000).prettyDistance // 10 km
Double(99999).prettyDistance // 100 km
Double(100000).prettyDistance // 100 km
Double(555555).prettyDistance // 555.56 km
Double(999999).prettyDistance // 1,000 km
Double(1000000).prettyDistance // 1,000 km
Double(1234567890).prettyDistance // 1,234,567.89 km

答案 5 :(得分:0)

您可以使用字符串格式来完成此任务:

//distance to 2 decimal places
NSString *target = [NSString stringWithFormat:@"%.2f miles", distance];

但是没有用于在距离测量之间进行转换的功能。