Removing a specific element from a ForEach produces an index out of range

Hi there!

I'm developing a MacOS app, and I have the following ForEach, inside a List:

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)}

I have a button that adds an instance of AdditionalData to AdditionalArray:

Button(action: {
                withAnimation(.easeIn) { additionalDataArray.additionalArray.append(AdditionalData()) }
}) { Label("Add", systemImage: "plus.viewfinder") }

When I swipe left to use .onDelete modifier, my app crashes saying me the index is out of range. What am I doing wrong?

May be there is an issue with indices update when you delete. There is a warning in documentation:

A collection’s indices property can hold a strong reference to the collection itself, causing the collection to be nonuniquely referenced. If you mutate the collection while iterating over its indices, a strong reference can result in an unexpected copy of the collection.

So, I would try the following:

ForEach(0..<additionalDataArray.additionalArray.count, id: \.self) { index in
    AdditionalModelView(additionalColor: $additionalDataArray.additionalArray[index].additionalColor)
    // others
}
.onDelete { indexSet in
   self.additionalDataArray.additionalArray.remove(atOffsets: indexSet)
}

Does it work now ? If so, don't forget to close the thread by marking correct answer ; otherwise, please report (what is the value of index that crashes, what is the count in the array, …)

Removing a specific element from a ForEach produces an index out of range
 
 
Q