Objective-C如何将€等货币符号转换为EUR等货币代码并显示在UILabel上
货币符号转对应货币代码(iOS实现方案)
核心逻辑
同一符号可能对应多个货币(如$可对应USD、CAD、AUD等),优先匹配当前设备区域对应的货币,匹配失败后再遍历全局货币规则,最后可通过自定义映射兜底,完全适配区域设置需求。
Swift 实现代码
func currencyCode(from symbol: String, prioritizing locale: Locale = .current) -> String? { // 优先匹配当前设备区域的货币,满足区域适配要求 if let currentCurrencySymbol = locale.currencySymbol, currentCurrencySymbol == symbol, let currentCode = locale.currencyCode { return currentCode } // 全局遍历所有区域匹配对应符号 for localeId in Locale.availableIdentifiers { let tempLocale = Locale(identifier: localeId) guard let tempSymbol = tempLocale.currencySymbol, tempSymbol == symbol, let tempCode = tempLocale.currencyCode else { continue } return tempCode } // 自定义兜底映射,可按需扩展 let customMappings: [String: String] = [ "€": "EUR", "£": "GBP", "¥": "CNY" ] return customMappings[symbol] }
调用示例(赋值到UILabel)
// 传入€符号的场景 let inputSymbol = "€" if let currencyCode = currencyCode(from: inputSymbol) { yourTargetLabel.text = currencyCode // 输出 EUR } // 设备区域为美国时传入$的场景 let usdSymbol = "$" if let usdCode = currencyCode(from: usdSymbol) { yourTargetLabel.text = usdCode // 输出 USD }
注意事项
- 多货币共用同一符号时,默认优先返回当前设备区域对应的货币代码,符合区域适配要求
- 全局遍历Locale性能损耗极低,可直接在主线程调用,无需异步处理
- 可按需扩展自定义兜底映射,覆盖冷门货币或者特殊符号的匹配需求
内容的提问来源于stack exchange,提问作者Fabrizio L.
相关产品推荐
相关产品推荐

