我正在 SwiftUI 中开发 MacOS 应用程序,并且我在列表中有以下 ForEach:
ForEach(additionalDataArray.additionalArray.indices, id: \.self) { index in
AdditionalModelView(
additionalColor: $additionalDataArray.additionalArray[index].additionalColor,
starsAdditionalColor: $additionalDataArray.additionalArray[index].starsAdditionalColor,
arrowsAdditionalColor: $additionalDataArray.additionalArray[index].arrowsAdditionalColor,
crossAdditionalColor: $additionalDataArray.additionalArray[index].crossAdditionalColor,
additionalHorizontalResolution: $additionalDataArray.additionalArray[index].additionalHorizontalResolution,
additionalVerticalResolution: $additionalDataArray.additionalArray[index].additionalVerticalResolution,
additionalOffsetX: $additionalDataArray.additionalArray[index].additionalOffsetX,
additionalOffsetY: $additionalDataArray.additionalArray[index].additionalOffsetY,
additionalFrameLinesToggle: $additionalDataArray.additionalArray[index].additionalFrameLinesToggle,
starsAdditionalToggle: $additionalDataArray.additionalArray[index].starsAdditionalToggle,
crossAdditionalToggle: $additionalDataArray.additionalArray[index].crossAdditionalToggle,
arrowsAdditionalToggle: $additionalDataArray.additionalArray[index].arrowsAdditionalToggle,
additionalFrameLineThickness: $additionalDataArray.additionalArray[index].additionalFrameLineThickness,
additionalCustomText: $additionalDataArray.additionalArray[index].additionalCustomText,
number: index + 1).environment(sourceData).listItemTint(Color.blue)
}.onDelete { indexSet in self.additionalDataArray.additionalArray.remove(atOffsets: indexSet)}
我还有一个按钮,可以将AdditionalData 的实例添加到AdditionalArray 中:
Button(action: {
withAnimation(.easeIn) { additionalDataArray.additionalArray.append(AdditionalData()) }
}) { Label("Add", systemImage: "plus.viewfinder") }
当我在 UI 上向左滑动调用 .onDelete 修饰符时,我的应用程序崩溃,提示我索引超出范围。我做错了什么?
在 SwiftUI 数据绑定中迭代带有索引的数组被认为是不安全的。看看这个。更改为:
ForEach(additionalDataArray.additionalArray, id: \.self) { data in
...
}