为将来会更改的状态变量保留先前的值



我有多个将在TextField中更改的@State变量,但我想保留旧值,以便在TextFields上更改状态值后使用

@State var name: String
var oldName = ???

最好的方法是什么?

更新以记住初始名称,而不是之前的名称。

如果你想记住初始名称,它必须由父视图作为常规常量提供。这样,它就与TextField操作的可修改状态属性解耦了。现在唯一缺少的是,需要用初始名称预先填充文本字段。这不能(不应该)在视图的init()中完成,而是使用生命周期事件,如.onAppear

struct TextFieldView: View {
let initialName: String
@State private var name: String

var body: some View {
TextField("Name", text: $name)
.onAppear { self.name = initialName }
}
}

如果您想保留旧值的整个字符串,则必须实现.onSubmit修饰符,因为如果文本字段绑定到name,则每次击键时值都会更改。

您可以添加第三个@State属性text,并在提交

时交换值
struct TextFieldView: View {
@State private var text = ""
@State private var name = ""
@State private var oldName = ""

var body: some View {
VStack {
TextField("Name", text: $text)
.onSubmit {
oldName = name
name = current
}
Text(oldName)
}
}
}

最新更新