为什么NavigationLink()在SwiftUI 2中保持打开状态

时间:2020-09-19 12:06:10

标签: swift swiftui master-detail swiftui-navigationlink

我有以下代码。当应用启动时, MasterView 正在打开,然后我单击一行并转到 DetailView 。将 RootTabView 中的标签更改为 OtherView 之后。然后,当我回到 MasterView 时,它会自动打开 DetailView

vm.getList()vm.getDetail()方法同样适用。为什么在 SwiftUI 2 中会发生这种情况?因为在 SwiftUI 1 中,它不是那样工作的。

struct RootTabView: View {
    @State var tabSelection = 0
    @State private var vm = ViewModel()
    
    var body: some View {
        TabView(selection: $tabSelection) {
            MasterView(vm: vm).tabItem({
                Text("Master")
            }).tag(0)
            
            OtherView().tabItem({
                Text("Other")
            }).tag(1)
        }
    }
}

struct MasterView: View {
    @ObservedObject var vm: ViewModel
    
    var body: some View {
        NavigationView {
            List(vm.toDoList, id: \.self) { toDo in
                NavigationLink(destination: DetailView(vm: vm)) {
                    Text(toDo)
                }
            }
        }
        .onAppear {
            vm.getList()
        }
    }
}

struct DetailView: View {
    @ObservedObject var vm: ViewModel
    
    var body: some View {
        Text(vm.toDoItem)
            .onAppear {
                vm.getDetail()
            }
    }
}

class ViewModel: ObservableObject {
    @Published var toDoList: [String] = []
    @Published var toDoItem: String = ""
    
    func getList() {
        toDoList = ["a", "b", "c"]
    }
    
    func getDetail() {
        // do some stuffs
        toDoItem = "A"
    }
}

0 个答案:

没有答案