SwiftUI TextField 中的货币输入

Currency input in SwiftUI TextField

我正在尝试实现在编辑模式详细视图中更改货币值的功能,但我正在努力获取数值的格式化输入。

struct JobDetailView_Edit: View {

@State var jobDetails: JobDetails

var currencyFormatter: NumberFormatter = {
    let f = NumberFormatter()
    f.numberStyle = .currency
    return f
}()

var body: some View {
    Form {

                Section(header: Text("General")) {
                    HStack {
                        Text("Job Name")
                        Spacer()
                        TextField($jobDetails.jobName)
                            .multilineTextAlignment(.trailing)
                    }

                    TextField($jobDetails.hourlyRateBasic, formatter: currencyFormatter)

                }
... other unimportant code...

数据被正确传递,文本字段显示存储在 $jobDetails.hourlyRateBasic 中的格式化值,但是,我无法编辑该字段,如果它是一个字符串,我将能够编辑。如果我尝试编辑该字段然后在模拟器中按回车键,我会收到以下错误消息:

[SwiftUI] Failure setting binding's value. The supplied formatter does not produce values of type Double. This may be resolved by ensuring the binding and the output of the formatter are of the same type.

仅供参考 $jobDetails.hourlyRateBasic 是双精度类型。

Ben Scheirman 创建了一个小费计算器,它使用带有货币格式化程序的 TextField。他的代码和你的代码之间的区别在于他将货币值存储在 Double? 中。 NumberFormatter returns 一个 NSNumber?.

你可以在 https://github.com/nsscreencast/397-swiftui-tip-calculator

查看他的代码

我创建了一个环绕 UITextfield 的组件。

你可以在这里查看https://github.com/youjinp/SwiftUIKit

这是演示