我的问题是:我有一个简单的数组,其中包含一些项目。我想使用
简化后的初始代码如下:
如果我现在尝试滑动删除一行,将会收到以下错误信息:
ForEach
和 .indices()
显示这些项目的 List
。(原因是我的实际问题涉及 List
中的 Toggle
,对于 isOn
绑定,我需要索引来寻址绑定到 EnvironmentObject
的模型)。所以循环遍历数组 items
的解决方案不适用于我的问题。简化后的初始代码如下:
struct ContentView: View {
@State var items = ["Item1", "Item2", "Item3"]
var body: some View {
List {
ForEach(items.indices) {index in
Text(self.items[index])
}.onDelete(perform: deleteItem)
}
}
func deleteItem(indexSet: IndexSet) {
self.items.remove(atOffsets: indexSet)
}
}
如果我现在尝试滑动删除一行,将会收到以下错误信息:
Thread 1: Fatal error: Index out of range
在闭包内调试index
值,我发现items
数组的索引没有更新。例如:如果我删除第一行中的"Item 1"
并检查删除行后index
的值,它返回2
而不是预期的数组第一个索引0
。这是为什么,我该如何解决这个问题?
谢谢你的帮助!
[Item]
数组的Model
类。而Item
是一个符合Identifiable
协议并且具有布尔属性的结构体。现在,如果我像上面那样构建相同的视图,一切都很好。但是当我将Text()
-视图替换为由布尔值控制的Toggle()
时,在删除时我会在AppDelegate
内部得到另一个错误:Thread 1: Fatal error: Index out of range
。这里发生了什么? - user11960918