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
相关产品推荐
相关产品推荐

