xcode 带整数的SwiftUI TextFields

zqry0prt  于 2023-04-07  发布在  Swift
关注(0)|答案(2)|浏览(145)

在SwiftUI中,我有两个文本字段。其中一个是String,另一个应该是Int。我希望文本字段在“保存”功能之前和之后都显示为空。
这就是我如何声明我的Int变量

@State private var newItemDays: Int?

这是文本字段

TextField("Task Title", text: $newItemTitle)
                        .padding()
                        .background(Color.white)
                    
TextField("Days to Countdown", value: $newItemDays, formatter: NumberFormatter())
                        .keyboardType(.numberPad)
                        .padding()
                        .background(Color.white)

我的“确定”按钮可以保存它们。

Button("OK") {
                            if let days = newItemDays {
                                
                                let newItem = CountdownItem(title: newItemTitle, daysLeft: days)
                                self.store.add(item: newItem)
                                newItemTitle = ""
                                newItemDays = 0
                                isTextFieldVisible = false
                            }
                            
                        }

If语句总是返回false,即使我把integer放在那里。如果我从声明中删除optional并使其等于0,它可以工作,但这次我在文本字段中看到0(它应该显示为空)
有什么帮助吗?

nvbavucw

nvbavucw1#

您可以创建一个自定义的NumberFormatter并将zeroSymbol设置为空String

let formatter: NumberFormatter = {
    let formatter = NumberFormatter()
    formatter.zeroSymbol = ""
    return formatter
}()

你的TextField变成:

TextField("Days to Countdown", value: $newItemDays, formatter: formatter)
x8diyxa7

x8diyxa72#

使用format:代替formatter:

TextField("Days to Countdown", value: $newItemDays, format: .number)

valueInt?时,它最初将显示为空。
顺便说一下,你不应该在body内部初始化像NumberFormatter()这样的对象,这是一个内存泄漏,最好坚持使用值类型。

相关问题