我有一个带有可选Int值的textField。但是当我改变int值时,textField没有被更新。代码如下所示。
@State private var amount: Double?
var body: some View {
VStack {
TextField(value: $amount, format: .number) {
Text("$0")
}
Button("reset") {
reset()
}
}
}
private func reset() {
amount = nil
}
我想textField的值为零时,按钮被点击。
但是上面的代码不起作用,可能是什么问题?
2条答案
按热度按时间flmtquvp1#
显示的是硬编码字符串
"$0"
--实际上并没有使用闭包值,需要使用字符串插值来显示实际的闭包值。您还需要决定在
amount
为nil
的情况下显示什么。下面的示例在amount
为nil
时显示0
。使用命名闭包参数有助于避免将来出现类似的问题,因为如果不使用命名闭包参数,就会收到编译器警告。
如果
amount
是nil
,您也可以显示String
"nil"
:hfyxw5xn2#
不能将变量
amount
设置为nil,因为amount
是一个Double
。您将得到以下错误:不能将“nil”赋给类型“Double”并且此代码Text("$0")
不正确。如果要显示amount
,必须使用Text("\(amount)")