Pretty Print Расстояния для iOS

У меня есть два объекта 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-библиотеке, которая может преобразовать расстояние до красивой строки или мне нужно сделать это вручную?

Ответ 1

К сожалению, вам нужно сделать это вручную.

И если вы это сделаете, пожалуйста, не забудьте проверить:

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

Остальной мир был бы рад.

Ответ 2

iOS 7 (и OS X 10.9) представил MKDistanceFormatter, который делает именно то, что вам нужно:

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

NSString *prettyString = [df stringFromDistance:distance];

Быстрая версия:

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

let prettyString = df.stringFromDistance(distance)

Ответ 3

Я просто хотел отметить, что, как и в случае с выпуском iOS8, для этой проблемы будет новый NSFormatters.

Там будут NSLengthFormatter, NSMassFormatter и NSEnergyFormatter, которые очень просты в использовании - см. этот учебник iOS8 NSFormatter. Вот пример использования метода LengthFormatter с быстрым:

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

Как и в случае с DateFormatter, вам больше не придется использовать NSLocale для печати самого устройства.

Ответ 4

TTTLocationFormatter из FormatterKit может быть именно то, что вы ищете. Если это не так, вы можете использовать его в качестве отправной точки.

Ответ 5

Вы можете использовать форматирование строк, чтобы выполнить следующее:

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

Но нет никакой функции для преобразования между измерениями расстояния или что-то в этом роде.