Skąd mam wiedzieć, który jest domyślnym systemem miar (imperialnym lub metrycznym) w systemie iOS?
Skąd mam wiedzieć, który jest domyślnym systemem miar (imperialnym lub metrycznym) na iOS ?
Jak uzyskać tę preferencję z ustawień urządzenia, aby wiedzieć, co wyświetlić w mojej aplikacji ?
Thanks
6 answers
The NSLocale
can tell you:
NSLocale *locale = [NSLocale currentLocale];
BOOL isMetric = [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue];
Tylko trzy kraje nie używają systemu metrycznego: USA, Liberia i Mjanma. Późniejsze używają własnego systemu, dwa pierwsze używają jednostek imperialnych.
Apples documentation says (akcent mine):
NSLocaleUsesMetricSystem
Klucz znacznika, który wskazuje, czy locale używa systemu metrycznego. Odpowiadającą jej wartością jest obiekt logiczny Nsnumber. Jeśli wartość jest NO, zazwyczaj można założyć, że miara Amerykańska jednostki (np. Mila statutowa).
Dostępne w iOS 2.0 i nowszych wersjach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-14 08:56:16
Oto wersja swift
var locale = NSLocale.currentLocale()
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-30 18:14:04
@ DarkDust odpowiedz na swift3
//User region setting return
let locale = Locale.current //NSLocale.current
//Returns true if the locale uses the metric system
let isMetric = locale.usesMetricSystem
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-12 06:45:13
Dla swift 3
let locale = NSLocale.current
let isMetric = locale.usesMetricSystem
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-14 14:28:35
Prawdopodobnie powinieneś po prostu mieć ustawienie w aplikacji i pozwolić użytkownikom wybrać -- to jest to, co robi Apple w aplikacji Pogoda.
Jeśli chcesz wybrać rozsądną wartość domyślną, możesz spojrzeć na ustawienia regionalne. Jeśli to my, wybierz imperialne, inaczej wybierz metryczne. Jest to heurystyczne, czasami będzie źle, ale to tylko domyślne, które można zmienić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-14 08:23:59
Jak inni już wcześniej wspomniali, Wielka Brytania używa mieszanki jednostek metrycznych i imperialnych.
Polecam użycie nowego MeassurementFormatter
wprowadzonego w iOS 10, który obsługuje większość tych rozbieżności:
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
Aby renderować odległość jako ciąg znaków w lokalnej, naturalnej jednostce, użyj:
let distanceInMeters: CLLocationDistance = 1000
let formatter = MeasurementFormatter()
formatter.string(from: Measurement(value: distanceInMeters, unit: UnitLength.meters)) // 0.621 mi
Oficjalna dokumentacja: https://developer.apple.com/documentation/foundation/measurementformatter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 20:04:25