转到某个视图时,请返回,然后再次转到该视图,因为变量具有数据,所以我的视图并没有完全销毁。如何完全销毁我的视线?
例如:
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
时,再返回并再次转到SliderView
,self.myData.lastText
不为空,它具有以前的值。
答案 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
),因此它会在任何地方更改时立即更新。
您应提供更多详细信息,以获取更准确的信息。