我正在尝试使用ForEach
. 以下代码按预期工作:我可以添加/删除文本字段,并且绑定是正确的。但是,当我items
在ObservableObject
视图模型中移动它时,它不再起作用并且会因index out of bounds
错误而崩溃。这是为什么?我怎样才能让它工作?
struct ContentView: View {
@State var items = ["A", "B", "C"]
var body: some View {
VStack {
ForEach(items.indices, id: \.self) { index in
FieldView(value: Binding<String>(get: {
items[index]
}, set: { newValue in
items[index] = newValue
})) {
items.remove(at: index)
}
}
Button("Add") {
items.append("")
}
}
}
}
struct FieldView: View {
@Binding var value: String
let onDelete: () -> Void
var body: some View {
HStack {
TextField("item", text: $value)
Button(action: {
onDelete()
}, label: {
Image(systemName: "multiply")
})
}
}
}
我尝试使用的视图模型:
class ViewModel: Observable {
@Published var items: [String]
}
@ObservedObject var viewModel: ViewModel
我发现很多问题都在处理同一个问题,但我无法解决我的问题。其中一些没有提到TextField
,而另一些则不工作(不再?)。
非常感谢