2011-11-14 47 views
8

我可以從NSLocale獲取本地貨幣的代碼嗎?我試過這個:我可以從NSLocale獲取本地貨幣的代碼嗎?

NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease]; 
NSString *currencyCode = [locale objectForKey:NSLocaleCurrencyCode]; 

但currencyCode返回爲零(我想要「EUR」,或類似的)。

+0

這個工作適合我。這不是內存問題? – Rodrigo

回答

19

在普通的Macintosh應用程序中,您的代碼對我來說工作得非常好。

NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease]; 
NSString *currencyCode = [locale objectForKey:NSLocaleCurrencyCode]; 
NSLog(@"currencyCode is %@", currencyCode); 

這顯示在控制檯:

2011-11-14 14:53:33.784 Testing[26388:707] currencyCode is EUR 

你們是不是要建立這個作爲一個命令行(基金會)的應用程序或一些非傳統的Mac樣?

+0

iPhone,而不是Mac。這可能嗎? – Simon

+0

同樣的代碼適用於我的iPhone,西蒙。嘗試將這些代碼行放入一個全新的iPhone應用程序中(就像我剛纔所做的那樣),只是爲了測試,並且您應該看到它們確實爲您工作。我認爲你的iPhone應用程序正在發生其他事情。你應該從這個問題中刪除「osx」標籤,b.t.w. :-) –

+0

完成。 :-)當我開始工作時,我會再試一次。 – Simon

0

NSLocale有一個稱爲- objectForKey:方法,返回對應於作爲一個參數傳遞的特定 NSLocale部件鍵的對象。隨着雨燕2.2,- objectForKey:有如下聲明:

func objectForKey(_ key: AnyObject) -> AnyObject? 

在衆多NSLocale component keys,蘋果指出約NSLocaleCurrencyCode

與該區域相關聯的貨幣代碼的關鍵。相應的值是一個NSString對象;例如「USD」。


因此,你可以檢索鏈接到NSLocale實例有以下雨燕2.2和斯威夫特3代碼段的幣種代碼:

雨燕2.2

import Foundation 

let locale = NSLocale(localeIdentifier: "fr_FR") 
//let locale = NSLocale.currentLocale() 
let localeCurrencyCode = locale.objectForKey(NSLocaleCurrencyCode) as! String 
print(localeCurrencyCode) // prints "EUR" 

斯威夫特3

import Foundation 

let locale = Locale(localeIdentifier: "fr_FR") 
//let locale = Locale.current 
let localeCurrencyCode = locale.object(forKey: Locale.Key.currencyCode) as! String 
print(localeCurrencyCode) // prints "EUR" 
相關問題