Ответ 1
К сожалению, вам нужно сделать это вручную.
И если вы это сделаете, пожалуйста, не забудьте проверить:
[[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue]
Остальной мир был бы рад.
У меня есть два объекта 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-библиотеке, которая может преобразовать расстояние до красивой строки или мне нужно сделать это вручную?
К сожалению, вам нужно сделать это вручную.
И если вы это сделаете, пожалуйста, не забудьте проверить:
[[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue]
Остальной мир был бы рад.
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)
Я просто хотел отметить, что, как и в случае с выпуском 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
для печати самого устройства.
TTTLocationFormatter из FormatterKit может быть именно то, что вы ищете. Если это не так, вы можете использовать его в качестве отправной точки.
Вы можете использовать форматирование строк, чтобы выполнить следующее:
//distance to 2 decimal places
NSString *target = [NSString stringWithFormat:@"%.2f miles", distance];
Но нет никакой функции для преобразования между измерениями расстояния или что-то в этом роде.