我有货币代码(例如:“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)
因为你的locale设置不正确。除了货币代码外,系统对您的语言环境一无所知。有两个几十个左右的语言环境,USD作为货币代码;它们的货币符号在US$和之间变化$。UAH有 2 个可用的语言环境:ru_UA和uk_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)
| 归档时间: |
|
| 查看次数: |
4955 次 |
| 最近记录: |