Как узнать, какая система мер по умолчанию (имперская или метрическая) в iOS?
Как узнать, какая система измерения по умолчанию (имперская или метрическая) в iOS ?
Как получить это предпочтение из настроек устройства, чтобы я знал, что отображать в моем приложении ?
спасибо
6 ответов
на NSLocale
могу тебе сказать:
NSLocale *locale = [NSLocale currentLocale];
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];
только три страны не используют метрическую систему: США, Либерия и Мьянма. Более поздние используют свою собственную систему, первые два используют имперские единицы.
яблоки документация говорит (выделено мной):
NSLocaleUsesMetricSystem
ключ для флага, указывающего, использует ли локаль метрическую систему. Соответствующее значение NSNumber объект boolean. если значение-Нет, вы обычно могут принимать американские единицы измерения (например, статутная миля).
доступно в iOS 2.0 и более поздних версиях.
вот быстрая версия
var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
@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
вы, вероятно, просто должны иметь настройку в своем приложении и позволить своим пользователям выбирать-это то, что Apple делает в приложении Weather.
Если вы хотите выбрать разумное значение по умолчанию, вы можете посмотреть на локаль. Если это мы, выберите imperial в противном случае выберите metric. Это эвристика, иногда это будет неправильно, но это просто дефолт, который можно изменить.
как уже упоминалось ранее, Великобритания использует сочетание метрических и имперских единиц.
Я бы рекомендовал использовать новый тег 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