提问人:Archie 提问时间:9/27/2023 更新时间:9/27/2023 访问量:54
在 SwiftUI 中,我可以在“预览”中为货币等设置区域设置,但保留文本字段的通用格式,例如 Locale.current.currencyCode ??“英镑”
In SwiftUI can I set a locale in Preview for currency etc. but keep generic format for text fields eg Locale.current.currencyCode ?? "GBP"
问:
Xcode 版本 15.0 设置为 iOS 15.0 正如标题所说,我的应用程序使用 Text(someAmount, format: Locale.current.currencyCode ??“GBP”) 显示货币数量,其符号应根据每个用户区域设置而更改。但是,在预览中,我得到了$,并且找不到仅用于预览的特定区域设置的方法。
我找到了一些示例代码,我必须稍微修改一下才能使其运行,但这会更改非预览代码并且是固定数量。
// App.swift file
import SwiftUI
@main
struct Locale_TestApp: App {
@StateObject var someCurrency = Currency()
var body: some Scene {
WindowGroup {
ContentView(currency: someCurrency)
}
}
}
// ContentView code.
import SwiftUI
class Currency: ObservableObject {
let currencyValue: Double = 123.45
func getFormattedCurrency(for locale: Locale) -> String{
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = locale
let formatterCurrency = formatter.string(for: self.currencyValue) ?? "?"
return formatterCurrency
}
}
struct ContentView: View {
@Environment(\.locale) var locale
let currency: Currency
var body: some View {
Text(currency.getFormattedCurrency(for: locale)) // Prints £123.45 for en_GB
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(currency: Currency())
.environment(\.locale, .init(identifier: "en_GB"))
}
}
如果我只在预览中将 .environment(.locale, .init(identifier: “en_GB”)) 行添加到 ContentView() 中,则只会将 $ 更改为 US$。
是否可以将预览设置为特定的区域设置,而保持“正常”代码不变?
答:
0赞
malhal
9/27/2023
#1
struct ContentView: View {
@Environment(\.locale) var locale
let currencyValue = 123.45
var body: some View {
Text(currencyValue, format: .currency(code: locale.currency?.identifier ?? "USD")
}
}
仅供参考,用于异步合并管道,您可能不需要它。@StateObject
评论
0赞
Archie
9/27/2023
好的,谢谢你。那时,我只是想得到编译器乐于编译的东西。我可以通过模拟器中的设置做我想做的事。
评论