title: SwiftUI: Index out of range when last element gets removed
body: <p>I have a checklist made with LazyVStack, I implemented remove functionality for the checklist items, but for some reason the a<strong>pp crashes with &quot;Index out of range&quot; only when I try to remove the last element</strong></p>
  <p>Here is my code:</p>
  <pre><code>struct ChecklistView: View {
      // Properties
      // ==========
      @ObservedObject var checklist = Checklist()
      @ObservedObject var viewModel: ChecklistViewModel
      @Binding var checklistItems: [ChecklistItem]
      @State var newItemName = &quot;&quot;
      @State var newChecklistItemViewIsVisible = false
      @State var presentAddNewItem = true
      let offlineMode: Bool
  
      var body: some View {
          VStack {
              LazyVStack {
                  ForEach(checklistItems) { item in
                      HStack {
                          RowView(checklistItem: $checklistItems[item], viewModel: viewModel)
                              .listRowInsets(.init(top: 0, leading: 8, bottom: 0, trailing: 0))
                              .padding(.horizontal, 12)
                              .padding(.top, 12)
                              .padding(.bottom, 4)
  
                          Button {
                              //Prints the correct index number for the last element in the array, but when I remove the last element, always crashes.
                              print(index)
                              if let index = checklistItems.firstIndex(where: {$0.id == checklistItems[item].id}){
                                  checklistItems.remove(at: index)
                              }
                          } label: {
                              Text(&quot;X&quot;)
                          }
                      }
  
                      Divider()
                          .frame(width: 311)
                  }
              }
          }
          .frame(width: UIScreen.main.bounds.width - 32)
          .background(backgroundSecondary)
          .cornerRadius(16)
          .overlay(
              RoundedRectangle(cornerRadius: 16)
                  .stroke(borderGray, lineWidth: 1)
          )
      }
  }
  </code></pre>