struct ParentView: View {
@ObservedObject var selectedFruit:Fruit
@State var showingSheet = false
var body: some View {
VStack {
HStack(spacing:0.6) {
ForEach(self.viewModel.fruits, id: \.id) { record in
Text(record).onTapGesture {
self.selectedFruit = Fruit() //Cannot assign to property: 'self' is immutable
self.showingSheet.toggle()
}
}
}
}.sheet(isPresented: $showingSheet,onDismiss: {
print("reload?")
}) {
DetailView(fruit: self.selectedFruit)
}
}
}
struct DetailView: View {
@ObservedObject var fruit: Fruit
var body: some View {
Text(fruit.text)
}
}
当我尝试将值分配给可观察到的selectedFruit
从ParentView
,我得到以下编译错误:
无法分配给属性:“self”是不可变的
但是如果我替换@ObservedObject
为@State
,它就可以工作。我怎样才能让它工作@ObservedObject
?我很担心,如果我使用 @State,我对该对象所做的更新DetailView
不会触发ParentView
.
有人可以帮我吗?
即使您可以 mutate self
,您也不想这样做。
An@ObservedObject
是对注入到您的视图中的对象实例的引用,通常来自超级视图,或者如果ParentView
是您的根视图,则来自您的场景委托。
通过为selectedFruit
您分配一个新值,您将更改此视图中引用的对象。但父视图仍会引用原始对象。
您selectedFruit
应该是@Published
您的viewModel
. 然后你会self.viewModel.selectedFruit = record
在你的onTapGesture
.
Paul Hudson 的这篇文章很好地概述了可观察对象、状态属性和环境之间的区别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句