Как узнать, какая система измерения используется по умолчанию (британская или метрическая) в iOS?
Как мне получить это предпочтение в настройках устройства, чтобы я знал, что отображать в моем приложении?
Благодарность
Как узнать, какая система измерения используется по умолчанию (британская или метрическая) в iOS?
Как мне получить это предпочтение в настройках устройства, чтобы я знал, что отображать в моем приложении?
Благодарность
NSLocale
может сказать вам:
NSLocale *locale = [NSLocale currentLocale];
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];
Только три страны не используют метрическую систему: США, Либерия и Мьянма. Последний использует свою собственную систему, первые два используют имперские единицы.
В документации по яблокам говорится (выделено мной):
NSLocaleUsesMetricSystem
Ключ для флага, который указывает, использует ли локаль метрическую систему. Соответствующим значением является логический объект NSNumber. Если значение НЕТ, вы обычно можете принять американские единицы измерения (например, статутную милю).
Доступно в iOS 2.0 и новее.
applicationDidBecomeActive:
для UIApplicationDelegate
(или подпишитесь на соответствующее уведомление, UIApplicationDidBecomeActiveNotification
) и / или подпишитесь на NSCurrentLocaleDidChangeNotification
.
- person DarkDust; 15.09.2011
@DarkDust ответ для swift3
//User region setting return
let locale = Locale.current //NSLocale.current
//Returns true if the locale uses the metric system
let isMetric = locale.usesMetricSystem
вот быстрая версия
var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
Для Swift 3
let locale = NSLocale.current
let isMetric = locale.usesMetricSystem
Locale.current.usesMetricSystem
отлично работает в iOS 9.
- person Graham Perks; 26.04.2017
Как уже упоминалось ранее, в Великобритании используются метрические и британские единицы измерения.
Я бы рекомендовал использовать новый MeassurementFormatter
, представленный в iOS 10, который обрабатывает большинство этих несоответствий:
import Foundation
let locale = Locale(identifier: "EN_UK")
locale.usesMetricSystem // true!
var formatter = MeasurementFormatter()
formatter.locale = locale
formatter.string(from: Measurement(value: 1000, unit: UnitLength.meters)) // 0.621 mi
Чтобы отобразить расстояние в виде строки в местных естественных единицах, используйте:
let distanceInMeters: CLLocationDistance = 1000
let formatter = MeasurementFormatter()
formatter.string(from: Measurement(value: distanceInMeters, unit: UnitLength.meters)) // 0.621 mi
Официальная документация: https://developer.apple.com/documentation/foundation/measurementformatter.
Вам, вероятно, следует просто настроить в своем приложении и позволить пользователям выбирать - это то, что Apple делает в приложении Погода.
Если вы хотите выбрать разумное значение по умолчанию, вы можете посмотреть на локаль. Если это США, выберите имперскую систему, иначе выберите метрическую систему. Это эвристика, иногда она будет ошибаться, но это просто значение по умолчанию, которое можно изменить.