ios SwifUI中未更改具有可选Int值的TextField

zc0qhyus  于 2023-02-26  发布在  iOS
关注(0)|答案(2)|浏览(123)

我有一个带有可选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的值为零时,按钮被点击。
但是上面的代码不起作用,可能是什么问题?

flmtquvp

flmtquvp1#

显示的是硬编码字符串"$0"--实际上并没有使用闭包值,需要使用字符串插值来显示实际的闭包值。
您还需要决定在amountnil的情况下显示什么。下面的示例在amountnil时显示0

TextField(value: $amount, format: .number) {
  Text("\($0 ?? 0)")
}

使用命名闭包参数有助于避免将来出现类似的问题,因为如果不使用命名闭包参数,就会收到编译器警告。
如果amountnil,您也可以显示String"nil"

TextField(value: $amount, format: .number) { amount in
  Text("\(amount?.description ?? "nil")")
}
hfyxw5xn

hfyxw5xn2#

不能将变量amount设置为nil,因为amount是一个Double。您将得到以下错误:不能将“nil”赋给类型“Double”并且此代码Text("$0")不正确。如果要显示amount,必须使用Text("\(amount)")

struct PostSwiperView: View {
    @State private var amount: Double = 0
    
    var body: some View {
        VStack {
            TextField(value: $amount, format: .number) {
                Text("\(amount)")
            }
            Button("reset") {
                reset()
            }
        }
    }
    
    private func reset() {
        amount = 0
    }
}

相关问题