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

如何根据用户所在国家显示不同的价格数值与货币类型

解决方案

1. 定义静态汇率与货币配置

先创建一个枚举来管理支持的货币类型、静态汇率和对应符号:

enum TargetCurrency: String {
    case usd = "USD"
    case gbp = "GBP"
    case eur = "EUR"
    
    // 静态汇率:1欧元兑换对应货币的数值
    var exchangeRateFromEUR: Double {
        switch self {
        case .eur: return 1.0
        case .usd: return 1.09
        case .gbp: return 0.86
        }
    }
    
    var symbol: String {
        switch self {
        case .eur: return "€"
        case .usd: return "$"
        case .gbp: return "£"
        }
    }
}

2. 获取用户区域对应的目标货币

通过系统Locale判断用户所在地区的货币类型:

func getUserTargetCurrency() -> TargetCurrency {
    let locale = Locale.current
    guard let currencyCode = locale.currencyCode else {
        return .eur // 无法获取时默认显示欧元
    }
    switch currencyCode {
    case TargetCurrency.usd.rawValue:
        return .usd
    case TargetCurrency.gbp.rawValue:
        return .gbp
    default:
        return .eur
    }
}

3. 修改视图实现价格转换与格式化

更新原有的ItemRow视图(注意遵循Swift大驼峰命名规范),加入转换和格式化逻辑:

struct ItemRow: View {
    let items: [Item] = Bundle.main.decode("item.json")
    private let targetCurrency = getUserTargetCurrency()
    
    // 欧元转目标货币
    private func convertPrice(eurPrice: Double) -> Double {
        eurPrice * targetCurrency.exchangeRateFromEUR
    }
    
    // 格式化价格字符串
    private func formatPrice(_ price: Double) -> String {
        let formattedNum = String(format: "%.2f", price)
        return "\(formattedNum)\(targetCurrency.symbol)"
    }
    
    var body: some View {
        List {
            ForEach(items) { item in
                HStack {
                    Text(item.name)
                    Spacer() // 让价格右对齐,优化布局
                    Text(formatPrice(convertPrice(eurPrice: item.price)))
                }
            }
        }
    }
}

额外优化说明

  • 遵循Swift命名规范,将原itemRow改为ItemRow
  • 添加Spacer()让价格在列表项右侧显示,布局更清晰
  • 保留欧元作为 fallback,避免无法获取用户区域时出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:25:29