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

SwiftUI预览中如何单独设置特定Locale以显示对应货币格式

解决方案:仅修改SwiftUI预览的Locale而不改动主业务代码

完全可以实现,问题出在你主代码里用了Locale.current——它是系统全局的Locale实例,不受SwiftUI环境变量的影响,所以你在预览里设置的.environment(\.locale)根本不起作用。要让预览的Locale设置生效,主代码需要读取SwiftUI环境中的Locale,而不是直接用Locale.current。

主代码调整(仅修改Locale获取方式,不改动业务逻辑)

把原来直接调用Locale.current的地方,换成读取环境变量里的Locale:

import SwiftUI

struct CurrencyView: View {
    let someAmount: Double = 19.99
    // 从SwiftUI环境中获取Locale
    @Environment(\.locale) private var locale
    
    var body: some View {
        Text(someAmount, format: locale.currencyCode ?? "GBP")
    }
}

如果你想兼容自动更新的系统Locale,也可以用Locale.autoupdatingCurrent,但更推荐用环境变量的方式,更贴合SwiftUI的状态管理逻辑。

预览代码设置

现在在预览里添加环境Locale设置,就能正确显示对应地区的货币符号了:

struct CurrencyView_Previews: PreviewProvider {
    static var previews: some View {
        CurrencyView()
            .environment(\.locale, Locale(identifier: "en_GB")) // 预览用英国Locale
            .previewDisplayName("UK Locale")
        
        // 可添加多Locale预览做对比
        CurrencyView()
            .environment(\.locale, Locale(identifier: "zh_CN"))
            .previewDisplayName("CN Locale")
    }
}

这样设置后,英国Locale的预览会显示£19.99,中国Locale的预览会显示¥19.99,完全不需要改动主业务的显示逻辑,只调整Locale的获取方式就能让预览的环境设置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:44:53