You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS17中货币符号获取不一致:如何稳定输出$?

iOS17下稳定获取美元符号$的解决方案

问题根源

  1. 原代码的问题:遍历所有系统可用Locale,取第一个货币代码匹配的Locale实例。iOS17中同一货币代码(如USD)对应多个Locale(比如en_US、en_CA),不同Locale的货币符号可能不同($和US$),导致输出不稳定。
  2. 你修改后的代码错误:把判断条件改成了$0.identifier == code,但Locale的identifier是区域标识(比如en_US),不是货币代码(比如USD),所以根本找不到匹配项,返回nil。

正确实现方式

要稳定输出$,直接基于固定区域(比如美式英语区域en_US)来获取符号,以下两种方案都可行:

方案一:直接调用Locale的新API

func getSymbolForCurrencyCode(code: String) -> String? {
    // 指定en_US区域,确保USD返回$
    let targetLocale = Locale(identifier: "en_US")
    return targetLocale.currencySymbol(for: code)
}

调用getSymbolForCurrencyCode(code: "USD")会稳定返回$。

方案二:使用NumberFormatter(更通用)

如果需要后续做货币格式化,这种方式更适配:

func getSymbolForCurrencyCode(code: String) -> String? {
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.currencyCode = code
    // 指定en_US区域保证符号为$
    formatter.locale = Locale(identifier: "en_US")
    return formatter.currencySymbol
}

注意事项

  • 不要再遍历所有availableIdentifiers,这种方式效率低且结果受系统版本影响,完全不可控。
  • iOS16及以上版本推荐使用currencySymbol(for:)这个新API,替代已废弃的currencyCode属性。

内容的提问来源于stack exchange,提问作者ppp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:05:27