Могу ли я получить код для местной валюты из NSLocale? - PullRequest
8 голосов
/ 14 ноября 2011

Могу ли я получить код для местной валюты из NSLocale? Я попробовал это:

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

но currencyCode возвращается как ноль (я хотел "EUR" или подобное).

Ответы [ 2 ]

19 голосов
/ 14 ноября 2011

Ваш код отлично работает для меня в обычном приложении 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

Вы пытаетесь создать это как приложение командной строки (Foundation) или что-то нетрадиционное для Mac?

0 голосов
/ 13 июля 2016

NSLocale имеет метод с именем - objectForKey:, который возвращает объект, соответствующий указанному ключу компонента NSLocale, переданному в качестве параметра.В Swift 2.2 - objectForKey: имеет следующее объявление:

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

Среди множества NSLocale компонентных ключей Apple заявляет о NSLocaleCurrencyCode:

Ключ для кода валюты, связанного с локалью.Соответствующее значение является NSString объектом;например, «USD».


Следовательно, вы можете получить код валюты, связанный с экземпляром NSLocale, с помощью следующих фрагментов кода Swift 2.2 и Swift 3:

Swift 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"

Swift 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"
...