Как узнать, какая система измерения по умолчанию (имперская или метрическая) в iOS? - PullRequest
39 голосов
/ 14 сентября 2011

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

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

спасибо

Ответы [ 6 ]

74 голосов
/ 14 сентября 2011

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

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

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

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

NSLocaleUsesMetricSystem

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

Доступно в iOS 2.0 и более поздних версиях.

19 голосов
/ 12 ноября 2016

@ 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
14 голосов
/ 30 июня 2015

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

var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
10 голосов
/ 14 сентября 2016

Для быстрых 3

    let locale = NSLocale.current
    let isMetric = locale.usesMetricSystem
4 голосов
/ 21 марта 2018

Как уже упоминалось ранее, Великобритания использует сочетание метрических и имперских единиц.

Я бы порекомендовал использовать новую 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

2 голосов
/ 14 сентября 2011

Вероятно, у вас просто должна быть настройка в вашем приложении, и пусть ваши пользователи выбирают - это то, что Apple делает в приложении Weather.

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

...