使用@State但出现错误:无法在不可变值上使用变异成员:'self'是不可变的

问题描述 投票:0回答:1

请有人能解释一下,为什么如果我在 onAppear 中定义实例 (t2Array),我可以添加另一个 eventArray,而如果我在结构体的开头将其声明为 @State (t3Array),则会收到错误: Cannot use mutating member关于不可变值:“self”是不可变的

两者的结构是:

struct T2 {
var name : String
var eventArray : [String]  }

以下内容在“onAppear”中运行良好:

 var t2Array = [T2(name: "T2", eventArray: ["event1"])]
 t2Array[0].eventArray.append("event2")
 

如果我执行以下操作,则会收到错误

 @State var t3Array:[T2]?

并且在“onAppear”中,错误位于 event2 的附加处:

  t3Array = [T2(name: "T2", eventArray: ["event1"])]
   self.t3Array[0].eventArray.append("event2"). //<<<-- error marked here

这是完整的代码示例

    struct T2 {
    var name : String
    var eventArray : [String]
}

struct ContentView: View {
    
    @State var t3Array:[T2]?
   

    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text("Hello, world!")
        }
        .padding()
        .onAppear(perform: {
                        
            var t2Array = [T2(name: "T2", eventArray: ["event1"])]
            t2Array[0].eventArray.append("event2")
            
            
            t3Array = [T2(name: "T2", eventArray: ["event1"])]
            self.t3Array[0].eventArray.append("event2")
            

        })
    }
}
swiftui struct properties
1个回答
0
投票

该错误具有误导性,因为

t3Array
是可选的。也可以:

  1. 像这样使用可选:

    t3Array?[0].eventArray.append("event2")
    

    或者

  2. 或者,不要将其设为可选,例如,

    @State var t3Array: [T2] = []
    
© www.soinside.com 2019 - 2024. All rights reserved.