在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)
当value
为Int?
时,初始值为空。
顺便说一下,你不应该在body
内部初始化NumberFormatter()
这样的对象,这是内存泄漏,最好坚持值类型。