在 SwiftUI 中动态更改货币格式

Dynamically Change Currency Format in SwiftUI

我正在尝试制作一个非常简单的应用程序,它会在用户选择首选货币时更改文本字段的格式

struct ContentView: View {

    @State var currency = "EUR"
    @State var amount = 0.0

    let currencies = ["GBP", "USD", "EUR", "WON", "LKR"]

    var body: some View {
        Form {
            TextField(
                "Amount",
                value: $amount,
                format: .currency(code: currency)
            )

            Picker("Currency", selection: $currency) {
                ForEach(currencies, id: \.self) {
                    Text([=10=])
                }
            }
            .pickerStyle(.segmented)

            Section {
                Text("Selected: \(currency)")
            }
        }
        .navigationTitle("Currency Picker Issue")
    }
}

这次尝试有两个主要问题:

  1. 选择新货币实际上并没有改变金额字段的格式
  2. 在金额中输入新值不会保存该值(一旦该字段失去焦点,它就会回零

为什么会这样?

有什么方法可以在 SwiftUI 中实现这样的功能吗?

对于第 1 个问题,您可以通过在 TextField 上使用 .id 强制 SwiftUI 重绘:

        TextField(
            "Amount",
            value: $amount,
            format: .currency(code: currency)
        )
            .id(currency) // forces redraw of view when changed

你的2.问题我无法重现,至少只要你输入一个有效的金额。