2011-09-14 105 views

回答

66

NSLocale可以告訴你:

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

只有三個國家不使用公制:美國,利比里亞和緬甸。後者使用自己的系統,前兩個使用英制單位。

蘋果文件說(重點煤礦):

NSLocaleUsesMetricSystem

的指示區域是否使用公制標誌的關鍵。 相應的值是布爾NSNumber對象。 如果該值爲NO,那麼通常可以假定美國的度量單位(例如法定英里數)。

適用於iOS 2.0及更高版本。

+4

注:英國使用公制和英制的組合。重量往往以千克爲單位,但距離(特別是在道路上)仍以英里爲單位。 –

+0

@DarkDust謝謝,這確實是一個解決方案。我現在唯一的問題是,如果用戶在多選時運行我的應用程序時,更改了iPad首選項的區域設置,那麼如何更新我的應用程序中的設置。我只能在viewDidAppear中檢查它,但有沒有更好的解決方案? – aneuryzm

+1

@Patrick:檢查'UIApplicationDelegate'的'applicationDidBecomeActive:'方法(或訂閱相應的通知,'UIApplicationDidBecomeActiveNotification')和/或訂閱'NSCurrentLocaleDidChangeNotification'。 – DarkDust

1

你或許應該只需要在你的應用程序的設置,讓您的用戶選擇 - 這是蘋果確實在天氣應用程序。

如果你想選擇一個合理的默認值,你可以看看語言環境。如果是美國,則選擇英制,否則選擇公制。這是一種啓發式的方法,有時候會出錯,但它只是一個可以改變的默認設置。

+0

我試圖這樣做。我有一個視圖控制器應該顯示單位制(釐米/英尺和英寸),並在兩者之間進行轉換。我使用切換開關(off:metric/on:imperial,默認值:off)製作了一個設置包。這在我第一次啓動應用程序時起作用。然而,如果我改變爲帝國,這種變化會經歷,但是變回( - >度量)並不會產生任何影響。想法? – coernel

13

這裏有一個快速的版本

var locale = NSLocale.currentLocale() 
let isMetric = locale.objectForKey(NSLocaleUsesMetricSystem) as! Bool 
+2

謝謝!對於Swift 2將會是:let locale = NSLocale.currentLocale() – Lucas

7

爲SWIFT 3

let locale = NSLocale.current 
    let isMetric = locale.usesMetricSystem 
+0

但是僅適用於iOS 10+;不清楚你如何在iOS 9的Swift 3應用中做到這一點。 – JLundell

+2

'Locale.current。usesMetricSystem'在iOS 9中運行良好。 –

11

@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 
相關問題