我有多个将在TextField中更改的@State变量,但我希望保留旧值,以便在TextField上更改状态值后使用
@State var name: String var oldName = ???
什么是最好的方法呢?
fslejnso1#
已更新以记住 * 初始 * 名称,而不是以前的名称。如果你想记住初始名称,它必须由父视图作为常规常量提供。这样,它就与TextField操作的可修改状态属性分离了。现在唯一缺少的是,文本字段需要用初始名称预先填充。这不能(不应该)在视图的init()中完成,但使用生命周期事件,如.onAppear。
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 } } }
2izufjch2#
如果要保留旧值的整个字符串,则必须实现.onSubmit修饰符,因为如果文本字段绑定到name,则每次击键时值都会更改。您可以添加第三个@State属性text,并在提交时交换值
.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) } } }
2条答案
按热度按时间fslejnso1#
已更新以记住 * 初始 * 名称,而不是以前的名称。
如果你想记住初始名称,它必须由父视图作为常规常量提供。这样,它就与
TextField
操作的可修改状态属性分离了。现在唯一缺少的是,文本字段需要用初始名称预先填充。这不能(不应该)在视图的init()
中完成,但使用生命周期事件,如.onAppear
。2izufjch2#
如果要保留旧值的整个字符串,则必须实现
.onSubmit
修饰符,因为如果文本字段绑定到name
,则每次击键时值都会更改。您可以添加第三个
@State
属性text
,并在提交时交换值