Swiftui 视图之间的快速切换

Swiftui 视图之间的快速切换,swiftui,Swiftui,我有一个包含整数数组的父视图(内容视图) 父视图中的视图切换器函数根据数组中整数的值切换子视图 我遇到的问题是“view1”被重新呈现(在之前呈现之后),视图没有被重新绘制,文本字段中的文本仍然填充 如何在每次调用switch函数时重新绘制子视图 谢谢 struct ContentView: View { var views = [2,1,1] @State var currentView = 0 var body: some View { VSt

我有一个包含整数数组的父视图(内容视图)

父视图中的视图切换器函数根据数组中整数的值切换子视图

我遇到的问题是“view1”被重新呈现(在之前呈现之后),视图没有被重新绘制,文本字段中的文本仍然填充

如何在每次调用switch函数时重新绘制子视图

谢谢

struct ContentView: View {

    var views =  [2,1,1]
    @State var currentView = 0

    var body: some View {

        VStack{
            viewSwitcher()
        }
    }

    func viewSwitcher() -> AnyView {
        switch views[currentView] {
        case 1:
            return AnyView(view1(currentView: self.$currentView))
        case 2:
            return AnyView(view2(currentView: self.$currentView))
        default:
            return AnyView(EmptyView())
        }
    }
}


struct view1:View {

    @State var textInput: String = ""
    @Binding var currentView: Int

    var body: some View {
        VStack{

            Text("View 1")

            TextField("Enter Text", text: self.$textInput)

            Button(action: {
                self.currentView += 1
            }){
                Text("Submit")
            }
        }
    }
}

struct view2:View {

    @Binding var currentView: Int

    var body: some View {

        VStack{
            Text("View 2")
            Button(action: {
                self.currentView += 1
            }){
                Text("Submit")
            }
        }
    }
}

这是可能的解决办法。使用.id修饰符会使视图在每次更新时都是唯一的,因此会进行重建

使用Xcode 11.4/iOS 13.4进行测试

func viewSwitcher() -> AnyView {
    switch views[currentView] {
    case 1:
        return AnyView(view1(currentView: self.$currentView).id(UUID()))
    case 2:
        return AnyView(view2(currentView: self.$currentView).id(UUID()))
    default:
        return AnyView(EmptyView())
    }
}