为什么视图在SwiftUI中无法完全销毁

时间:2019-12-18 06:51:03

标签: swiftui

转到某个视图时,请返回,然后再次转到该视图,因为变量具有数据,所以我的视图并没有完全销毁。如何完全销毁我的视线?

例如:

struct Home: View {


    var body : some View { 
        VStack {
            NavigationLink(destination : SliderView()){
               Text("\(self.myData.lastText)").bold()
            } 
        }
    }

}


struct SliderView: View {


    @ObservedObject myData : MyData = MyData()

    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var body : some View { 
        VStack {
            Button(action : {
                 self.presentationMode.wrappedValue.dismiss() 
            }) { 
                Text("Dismiss").bold() 
            }
            Text("\(self.myData.lastText)").bold()
        } 
    }

}

当我转到SliderView时,再返回并再次转到SliderViewself.myData.lastText不为空,它具有以前的值。

3 个答案:

答案 0 :(得分:1)

从Xcode 12和iOS 14开始,您现在可以使用@StateObject。有关更多信息,请参见official documentation

答案 1 :(得分:1)

我经历了相同的症状。 原因是 当“主页”为根视图时,返回“主页”时不会重新创建Home 并且Home的{​​{1}}包含NavigationLink并使用现有的SliderView()

我认为您可以测试以下内容,并发现SliderView已重新创建并再次加载数据。 这只是说明问题所在。我认为下面的代码不好。 因为我对SwiftUI缺乏经验。请告诉我是否有问题。我不知道什么是解决此问题的最佳方法。尽管下面的代码可以解决问题。

SliderView

答案 2 :(得分:0)

view 正在破坏,但是新的view使用先前的viewModel

您一直在引用相同的MyData()对象。因此,如果您在任何地方进行更改,所有参考都将被更新。并且由于您似乎正在实时观察更改(@ObservedObject),因此它会在任何地方更改时立即更新。

您应提供更多详细信息,以获取更准确的信息。