如何从 Swift 中所有可用语言环境的货币代码中获取货币符号?

qwe*_*der 5 ios swift

我有货币代码(例如:“UAH”)。在我的代码中,我得到货币符号等于货币代码(“UAH”),但对于“USD”和“EUR”-“$”和“€”。为什么?

let currencyCode = "UAH"

let localeComponents = [NSLocaleCurrencyCode: currencyCode]

let localeIdentifier = NSLocale.localeIdentifierFromComponents(localeComponents)

let locale = NSLocale(localeIdentifier: localeIdentifier)

let currencySymbol = locale.objectForKey(NSLocaleCurrencySymbol)
Run Code Online (Sandbox Code Playgroud)

我找到了解决方案:

let locales: NSArray = NSLocale.availableLocaleIdentifiers()
for localeID in locales as! [NSString] {
    let locale = NSLocale(localeIdentifier: localeID as String)
    let code = locale.objectForKey(NSLocaleCurrencyCode) as? String
    if code == "UAH" {
        let symbol = locale.objectForKey(NSLocaleCurrencySymbol) as? String
    print(symbol!)
    break
    }
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*ent 6

因为你的locale设置不正确。除了货币代码外,系统对您的语言环境一无所知。有两个几十个左右的语言环境,USD作为货币代码;它们的货币符号在US$和之间变化$UAH有 2 个可用的语言环境:ru_UAuk_UA.

更安全的方法是遍历所有与您指定的货币代码相同的语言环境,然后使用规则从结果列表中进行选择:

let currencyCode = "UAH"

let currencySymbols = NSLocale
                        .availableLocaleIdentifiers()
                        .map { NSLocale(localeIdentifier: $0) }
                        .filter {
                            if let localeCurrencyCode = $0.objectForKey(NSLocaleCurrencyCode) as? String {
                                return localeCurrencyCode == currencyCode 
                            } else {
                                return false
                            }
                        }
                        .map {
                           ($0.localeIdentifier, $0.objectForKey(NSLocaleCurrencySymbol)!)
                        }

print(currencySymbols) // Now you can choose from the list
Run Code Online (Sandbox Code Playgroud)

  • **Swift3** let currencyCode = "UAH" let curr = Locale.availableIdentifiers.map{ Locale(identifier: $0)}.filter { return currencyCode == $0.currencyCode }.map { ($0.identifier, $0.currencySymbol) }.flatMap {$0}.first print(curr) (3认同)