Ios 地区是否可以通过货币代码识别国家?
我在这里寻找答案,也在官方文件中,但我找不到答案。我有货币代码(例如“欧元”)。我需要获得国家代码(例如“EU”)。所以我看到我可以做相反的事情(通过使用国家代码获得货币代码),但我试图根据我的需要更改此解决方案,结果得到了零。此外,我知道我可以使用简单的解决方案——从货币代码中删除最后一个字母以获得国家代码(它适用于大多数情况下的API数据,但并非所有情况)——但我觉得这种方法不安全。所以我的问题就像标题中的那个样:我能用语言环境从货币代码中识别国家吗 我的做法如下: 使用NSLocaleIos 地区是否可以通过货币代码识别国家?,ios,swift,locale,Ios,Swift,Locale,我在这里寻找答案,也在官方文件中,但我找不到答案。我有货币代码(例如“欧元”)。我需要获得国家代码(例如“EU”)。所以我看到我可以做相反的事情(通过使用国家代码获得货币代码),但我试图根据我的需要更改此解决方案,结果得到了零。此外,我知道我可以使用简单的解决方案——从货币代码中删除最后一个字母以获得国家代码(它适用于大多数情况下的API数据,但并非所有情况)——但我觉得这种方法不安全。所以我的问题就像标题中的那个样:我能用语言环境从货币代码中识别国家吗 我的做法如下: 使用NSLocale e
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)
}
}
一种货币可以与多个国家关联,您应该创建自己的自定义数据实现,例如以下json
{
"EUR":"PL",
"USD":"CA"
}
在您的Xcode项目中创建一个文件,并将其命名为例如data.json
,然后按上述方式粘贴此类json,最后使用以下方法
func getCountryCode(currency: String) -> String? {
var countryCode: String?
let url = Bundle.main.url(forResource: "data", withExtension: "json")!
do {
let data = try Data(contentsOf: url)
let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: String]
countryCode = json?[currency]
} catch {
print(error.localizedDescription)
}
return countryCode
}
用法
if let countryCode = getCountryCode(currency: "EUR") {
print(countryCode)
}
来自@AamirR的答案有点不准确
- 欧元!=波兰,波兰=PLN=波兰
- 美元!=CA,CA=CAD=Canada
- 印尼国家电力公司=波兰
- 英镑=英国
- 美元=美国=美利坚合众国
- AMD=亚美尼亚
- 捷克共和国
- BRL=巴西
let currencyCode = "USD"
let countryCode = String(currencyCode.prefix(2))
let countryName = Locale.current.localizedString(forRegionCode: countryCode)
print(countryName)
Optional("United States")
然而,正如上面一些评论所述,例如,欧盟不是一个国家,在您的具体案例中,您不需要国旗,您需要“货币国旗”,因此对于欧元,您将显示欧盟国旗,这是正确的,因为您无法确定要显示哪个欧盟国旗-法国、德国等。。。因此,这种方法可能适用于将货币映射到国家标志
尽管存在一些例外,但就货币代码的前两个字母与国家名称的前两个字母不匹配而言,从ISO 3166-2国家代码的角度来看,它们仍然匹配:
- 瑞士法郎=瑞士
- HRK=克罗地亚
- 丹麦克朗=丹麦
另一个有趣的模式是,货币代码的前两个字母通常与国家互联网域名匹配,但同样,也有一些例外情况。这应该如何工作?例如,欧元是19个不同国家的货币。美元(USD)也是多个国家的货币。“欧盟”不是一个国家。是的,这是正确的。也许我会多解释一点我想要实现的目标。我想获得给定货币的标志-例如,如果您将unicode与EU一起使用,那么您将获得欧盟标志。对于每种货币,我都需要该标志(如果没有,则返回空字符串或nil)。我已经有了为给定regionCode获取此标志的代码,但我必须从货币代码中获取该地区代码我所做的工作,可能大多数显示货币标志的应用程序都是以货币代码命名货币图像。简单。无需尝试将货币代码映射到任何其他代码。有“欧元”货币代码吗?然后加载一个名为“EUR.png”的图像。有“USD”,然后加载“USD.png”。我考虑过这种方法,这是正确的,但我希望,我可以不用额外的文件(比如这个json)就可以做到这一点,在我看来,这将是一种更简单、更优雅的方式。但也许这是不可能的,这将是最好的解决办法。