【发布时间】:2021-10-28 02:13:49
【问题描述】:
我试图从 Swift 和 SwiftUI 的列表中简单地删除一个元素。如果没有在ForEach 循环中绑定某些东西,它确实会被删除。但是,在绑定某些东西时,它会因错误Index out of range 而崩溃。 ForEach 循环似乎是恒定的,不更新,并试图在特定索引处呈现。
示例查看代码:
@ObservedObject var todoViewModel: TodoViewModel
//...
ForEach(self.todoViewModel.todos.indices) { index in
TextField("Test", text: self.$todoViewModel.todos[index].title)
.contextMenu(ContextMenu(menuItems: {
VStack {
Button(action: {
self.todoViewModel.deleteAt(index)
}, label: {
Label("Delete", systemImage: "trash")
})
}
}))
}
示例视图模型代码:
final class TodoViewModel: ObservableObject {
@Published var todos: [Todo] = []
func deleteAt(_ index: Int) -> Void {
self.todos.remove(at: index)
}
}
示例型号代码:
struct Todo: Identifiable {
var id: Int
var title: String = ""
}
有谁知道如何从ForEach 循环中绑定的列表中正确删除一个元素?
【问题讨论】:
-
这是否回答了您的问题stackoverflow.com/a/58911168/12299030?
-
遗憾的是没有。我也注意到了这一点,但是您可以在代码中看到我没有使用
ForEach中的任何范围
标签: arrays swift swiftui swift3