我有以下情况:我正在创建一个Form
,用户可以在其中输入一个金额TextField
。另外,用户可以通过Picker
选择一种货币。金额用NumberFormatter
设置格式,每当用户更改币种时,我都希望更新文本。
@State private var currencyCode = "EUR"
那是格式化程序:
private let currencyFormatter: NumberFormatter = {
var formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = $currencyCode // something like this, but that's not working!
return formatter
}()
表单如下:
Form {
Section {
TextField("Enter a description", text: $reason)
TextField("Amount", value: $amount, formatter: currencyFormatter)
.keyboardType(.decimalPad)
}
Section {
Picker(selection: $currencyCode, label: Text("Currency")) {
ForEach(codes, id: \.self) { code in
Text(code)
}
}
}
}
答案 0 :(得分:1)
首先,您需要删除$
。 $currencyCode
给您一个Binding<String>
,但是您需要值,而不是绑定到值。 (请参阅this answer,我将在其中解释绑定。)
第二,您要使用计算属性,因为数字格式器需要根据所选的currencyCode
进行更改。将其放入您的视图结构中:
private var currencyFormatter: NumberFormatter {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = currencyCode
return formatter
}