无法分配给属性:在将值分配给 @ObservedObject 时,“self”是不可变的

伊尔舒
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)
    }
}

当我尝试将值分配给可观察到的selectedFruitParentView,我得到以下编译错误:

无法分配给属性:“self”是不可变的

但是如果我替换@ObservedObject@State,它就可以工作。我怎样才能让它工作@ObservedObject我很担心,如果我使用 @State,我对该对象所做的更新DetailView不会触发ParentView.

有人可以帮我吗?

保威11

即使您可以 mutate self,您也不想这样做。

An@ObservedObject是对注入到您的视图中的对象实例的引用,通常来自超级视图,或者如果ParentView是您的根视图,则来自您的场景委托。

通过为selectedFruit分配一个新值,您将更改此视图中引用的对象但父视图仍会引用原始对象。

selectedFruit应该是@Published您的viewModel. 然后你会self.viewModel.selectedFruit = record在你的onTapGesture.

Paul Hudson 的这篇文章很好地概述了可观察对象、状态属性和环境之间的区别。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swiftui无法分配给属性:'self'是不可变的错误

尝试分配给字符串+角色时,“无法分配给不可变值”

检查属性时无法将组件分配给变量

无法分配给属性:“自身”是不可变的

无法分配给属性:“$0”是不可变的

“无法分配给属性:“任何”都是不可变的”错误

无法分配给属性:“自身”是不可变的快速错误

无法分配给属性:“ $ text”是不可变的

Swift无法分配给NSData类型的不可变值

无法分配给属性:函数调用返回不可变的值

打印属性值,但分配给标签时显示nil

将属性路径分配给变量时,PHP simplexmlelement无法找到属性

为什么在将值分配给QString时出错

将值分配给数组时崩溃

Flutter:将值分配给const color时出错

将函数分配给字典值时出错

将值分配给结构字段时程序崩溃

无法分配给属性:“(description)”属性是不可变的错误,带有(leftSwipe.description = .Left)

无法将值“null”分配给参数类型“Offset”,因为“Offset”不可为空

无法将字符串值分配给打字稿枚举(初始化程序类型的字符串不可分配给变量类型)

Rails 3.2:将值分配给嵌套属性时为“未初始化的常数”

将值分配给小部件的属性时,应用程序停止

错误-无法分配给值:函数调用返回不可变的值

Xcode错误:“无法分配给值:函数调用返回不可变的值”在表视图中

无法分配给值:函数调用返回不可变值

无法在回发时将hiddenfield值分配给select2

无法将“ViewController”类型的值分配给“SPTAudioStreamingDelegate!”类型 设置 Spotify API 时

将值分配给加载页面中的文本框时无法更新数据

错误:将值分配给数组时,分配给具有数组类型的表达式