SwiftUI TextFields with Integer



在SwiftUI中,我有两个文本字段。其中一个是String,另一个是Int。我希望文本框在"save"前后显示为空;功能。

这是我声明Int变量

的方式
@State private var newItemDays: Int?

这是textfields

TextField("Task Title", text: $newItemTitle)
.padding()
.background(Color.white)

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

我的Ok键保存它们。

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,即使我在那里输入整数。如果我从声明中删除optional并使其等于0,它会工作,但这次我在文本字段中看到0(它应该显示为空)

帮忙吗?

您可以创建自定义的NumberFormatter&设置zeroSymbol为空String:

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

你的TextField变成:

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

format:代替formatter:

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

valueInt?时,初始值为空。

顺便说一下,你不应该在body内部初始化NumberFormatter()这样的对象,这是内存泄漏,最好坚持值类型。

最新更新