从 Foreach 中删除元素会导致索引超出范围错误

问题描述 投票:0回答:1

我正在 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 修饰符时,我的应用程序崩溃,提示我索引超出范围。我做错了什么?

arrays swift macos swiftui foreach
1个回答
0
投票

在 SwiftUI 数据绑定中迭代带有索引的数组被认为是不安全的。看看这个。更改为:

ForEach(additionalDataArray.additionalArray, id: \.self) { data in
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.