我有两个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库中有什么东西可以将距离转换成漂亮的字符串,还是我必须手动执行此操作?
答案 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
。
NSLengthFormatter
,NSMassFormatter
和NSEnergyFormatter
非常容易使用 - 请参阅此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)
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];
但是没有用于在距离测量之间进行转换的功能。