ios 保留将来将更改的状态变量的以前值

xzv2uavs  于 2022-11-19  发布在  iOS
关注(0)|答案(2)|浏览(161)

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

@State var name: String

var oldName = ???

什么是最好的方法呢?

fslejnso

fslejnso1#

已更新以记住 * 初始 * 名称,而不是以前的名称。
如果你想记住初始名称,它必须由父视图作为常规常量提供。这样,它就与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 }
    }
}
2izufjch

2izufjch2#

如果要保留旧值的整个字符串,则必须实现.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)
        }
    }
}

相关问题