【发布时间】:2019-05-04 09:36:48
【问题描述】:
我在此处以及官方文档中寻找答案,但我找不到答案。我有货币代码(例如“EUR”)。我需要获取国家代码(例如“欧盟”)。所以我看到我可以反过来做(通过使用国家代码获取货币代码),但我试图根据我的需要改变这个解决方案,结果我得到了 nil 。我也知道我可以使用简单的解决方案 - 从货币代码中删除最后一个字母以获取国家代码(它适用于我的 API 数据中的大多数情况,但并非无处不在) - 但我觉得这种方法不安全。所以我的问题就像标题一样:我可以使用语言环境从货币代码中识别国家吗?
这是我的方法:
使用 NSLocale
extension NSLocale {
static func currencySymbolFromCode(code: String) -> String? {
let localeIdentifier = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.currencyCode.rawValue : code])
let locale = NSLocale(localeIdentifier: localeIdentifier)
return locale.object(forKey: NSLocale.Key.countryCode) as? String
}
}
使用区域设置
extension Locale {
static let countryCode: [String: String] = Locale.isoCurrencyCodes.reduce(into: [:]) {
let locale = Locale(identifier: Locale.identifier(fromComponents: [NSLocale.Key.currencyCode.rawValue: $1]))
$0[$1] = (locale.regionCode)
}
}
【问题讨论】:
-
这应该如何工作?例如,欧元 (EUR) 是 19 个不同国家的货币。美元 (USD) 也是多个国家/地区的货币。
-
“欧盟”不是国家/地区。
-
是的,这是正确的。也许我会多解释一下我想要实现的目标。我想获得给定货币的标志 - 例如如果您在欧盟中使用 unicode,那么您将获得欧盟旗帜。而且我需要每种货币的标志(或者如果没有,则返回空字符串或零)。我有获取给定区域代码的这个标志的代码,但我必须从货币代码中获取该区域代码
-
我所做的,可能也是大多数显示货币标志的应用程序的做法,就是在货币代码之后命名货币图像。简单的。无需尝试将货币代码映射到其他任何内容。有“EUR”货币代码吗?然后加载一个名为“EUR.png”的图像。拥有“USD”,然后加载“USD.png”。