Как узнать, какая система измерения используется по умолчанию (британская или метрическая) в iOS?

Как узнать, какая система измерения используется по умолчанию (британская или метрическая) в iOS?

Как мне получить это предпочтение в настройках устройства, чтобы я знал, что отображать в моем приложении?

Благодарность


person aneuryzm    schedule 14.09.2011    source источник


Ответы (6)


NSLocale может сказать вам:

NSLocale *locale = [NSLocale currentLocale]; 
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];

Только три страны не используют метрическую систему: США, Либерия и Мьянма. Последний использует свою собственную систему, первые два используют имперские единицы.

В документации по яблокам говорится (выделено мной):

NSLocaleUsesMetricSystem

Ключ для флага, который указывает, использует ли локаль метрическую систему. Соответствующим значением является логический объект NSNumber. Если значение НЕТ, вы обычно можете принять американские единицы измерения (например, статутную милю).

Доступно в iOS 2.0 и новее.

person DarkDust    schedule 14.09.2011
comment
NB: В Великобритании используется комбинация метрической и британской системы мер. Вес обычно измеряется в килограммах, но расстояние (особенно по дорогам) по-прежнему измеряется в милях. - person James Webster; 14.09.2011
comment
@DarkDust Спасибо, это действительно было решение. Моя единственная проблема сейчас заключается в том, как обновить настройки в моем приложении, если пользователь изменяет настройку локали из настроек iPad при запуске моего приложения в многозадачном режиме. Я могу только проверить это в viewDidAppear, но есть ли лучшее решение? - person aneuryzm; 15.09.2011
comment
@Patrick: проверьте метод 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
person Nazmul Hasan    schedule 12.11.2016

вот быстрая версия

var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
person nibty    schedule 30.06.2015
comment
Спасибо! Для Swift 2 будет: let locale = NSLocale.currentLocale () - person Lucas; 18.11.2015

Для Swift 3

    let locale = NSLocale.current
    let isMetric = locale.usesMetricSystem
person GIJOW    schedule 14.09.2016
comment
Но только для iOS 10+; Мне непонятно, как это сделать в приложении Swift 3, ориентированном на iOS 9. - person JLundell; 06.11.2016
comment
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.

person Eneko Alonso    schedule 21.03.2018

Вам, вероятно, следует просто настроить в своем приложении и позволить пользователям выбирать - это то, что Apple делает в приложении Погода.

Если вы хотите выбрать разумное значение по умолчанию, вы можете посмотреть на локаль. Если это США, выберите имперскую систему, иначе выберите метрическую систему. Это эвристика, иногда она будет ошибаться, но это просто значение по умолчанию, которое можно изменить.

person Stephen Darlington    schedule 14.09.2011
comment
Я пытаюсь сделать именно это. У меня есть контроллер представления, который должен отображать систему единиц (см / футы и дюймы) и конвертировать между ними. Я сделал набор настроек с тумблером (выкл: метрическая система / вкл: британская система мер, по умолчанию: выкл). это работает, когда я запускаю приложение в первый раз. однако, если я перейду на британскую систему мер, это изменение будет выполнено, но изменение обратно на «выключено» (- ›метрическая система) не окажет никакого влияния. идеи? - person coernel; 20.02.2015