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

qwerty-reloader

我有货币代码(例如:“ 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)

我找到了解决方案:

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
    }
}
代码不同

因为您的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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章