请有人能解释一下,为什么如果我在 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")
})
}
}
该错误具有误导性,因为
t3Array
是可选的。也可以:
像这样使用可选:
t3Array?[0].eventArray.append("event2")
或者
或者,不要将其设为可选,例如,
@State var t3Array: [T2] = []