我正在尝试创建一个简单的代码:我有一个包含三个对象的“数组”,每个对象都包含一个布尔值。我想创建一个为每个对象创建一个按钮的列表,当我单击该按钮时,对象的值就会切换。我尝试过,但收到错误消息:“无法分配给属性:'n'是'let'常量”。 您对我有什么建议或简单的代码吗?
import SwiftUI
struct Object {
var id = UUID()
var selected : Bool
}
struct ContentView: View {
var array = [Object( selected: false), Object(selected: false), Object(selected: false)]
var body: some View {
ForEach(array, id: (\.id)) { n in
VStack {
Button( action: { n.selected = true }) { Text("Change")}
}
}
}
}
答案 0 :(得分:0)
您不能更改在块中传递的变量,因为它是不可变的。这只是列表元素的副本,而不是实际的列表元素。
一种可行的替代实现方式是:
import SwiftUI
struct Object {
var id = UUID()
var selected: Bool
}
struct ContentView: View {
@State var array = [Object(selected: false), Object(selected: false), Object(selected: false)]
var body: some View {
ForEach(array.indices) { index in
VStack {
Button(action: { self.array[index].selected = true }) {
Text("Change: \(self.array[index].selected.description)")
}
}
}
}
}
我添加了@State装饰器,它是您进行数组更改所必需的,可以刷新视图,并且我还更改了获取值的方式,直接从数组获取而不是获取它来自参数。