我学习SwiftUI已经一周了,最近我发现了一个令人困惑的问题.

@State private var checkAmount = 0.0
    var body: some View {
            NavigationView {
                Form {
                    
                    Section {
                        TextField("Amount", value: $checkAmount, format: .currency(code: Locale.current.currency?.identifier ?? "USD"))
                            .keyboardType(.decimalPad)
                    }
                    
    
        
                    Section{
                        Text(checkAmount, format:.currency(code: Locale.current.currency?.identifier ?? "USD"))
                    }
                    
                }
     
            }

    }

我使用TextFile来接收用户的输入并更改checkAmount的值,并使值显示在下面的部分中.以下是我在Xcode中的预览. Preview个 但当我键入一个随机数字并将其全部删除时,发生了以下情况: Still a digit here

看来SwiftUI没有把它全部删除,还保留了我删除的最后一个数字.

我想当用户的输入为空时,我可能应该给它一个缺省值?

可能需要一些附加信息:我使用的是M1 MacMini和XCode14.1

推荐答案

Approach

Code

struct ContentView: View {

    @State private var checkAmount = Decimal?(0.0) //Optional decimal

    var body: some View {
        NavigationView {
            Form {
                Section {
                    TextField("Amount", value: $checkAmount, format: .currency(code: Locale.current.currency?.identifier ?? "USD"))
                        .keyboardType(.decimalPad)
                }
                Section{
                    //Use ?? operator to display 0 when nil
                    Text(checkAmount ?? 0, format:.currency(code: Locale.current.currency?.identifier ?? "USD"))
                }
            }
            .onChange(of: checkAmount) { newValue in
                print("checkAmount = \(String(describing: newValue))")
            }
        }
    }
}

Swift相关问答推荐

WWDC Swift并发会话中的厨房服务示例令人困惑

如何将CodingKeys作为数组而不是枚举传递到类外部的函数中?

如何把多个可观测性变成一个完备性?

如何在每天午夜重置布尔值

带DispatchSourceTimer的定时器

如何在DATE()中进行比较

SwiftUI 中的同一个 ForEach 中是否可以有 2 个数组?

如何在设备(或常量)地址空间中创建缓冲区?

字符串和整数格式的for循环,帮忙!

当字符串包含 \r\n 时,NSRegularExpression 不起作用

有没有一种方法可以访问封闭实例ObservableObject以从属性包装器中的任何位置调用objectWillChange.send()

ConfirmationDialog取消swiftui中的错误

在 Vapor 4 中使用协议的通用流利查询

(SwiftLint)如果有正文,如何编写规则(可能是自定义),在{之后总是\n(换行)?

Swift中的分段错误

What is "SwiftPM.SPMRepositoryError error 5"?

如何在 Swift 中判断变量的类型

使用 swift IOS 使 UIBarButtonItem 消失

swift中相同的数据类型多变量声明

UITableView 布局在 push segue 和 return 上搞砸了. (iOS 8、Xcode beta 5、Swift)