如何避免错误指数超出范围?

我尝试在collectionCell中 选择多个项目 ,但如果我点击多次 取消选择单元格我会收到错误 Thread 1: Fatal error: Index out of range

在此行上, indexPath.item == 1上的selectedTimeIntervalArray.remove(at: indexPath.item)

如何避免这个错误

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let selectedCell = collectionView.cellForItem(at: indexPath) if indexPath.item == 0 { selectedBackgroundColor(cell: selectedCell!) selectedTime = timeIntervalArray[indexPath.item] selectedTimeLabel.text = "Время - \(selectedTime)" selectedTimeIntervalArray.append(selectedTime) } else if indexPath.item == 1 { selectedBackgroundColor(cell: selectedCell!) selectedTime2 = timeIntervalArray[indexPath.item] selectedTimeIntervalArray.append(selectedTime2) } } func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { let deselectedCell = collectionView.cellForItem(at: indexPath) if indexPath.item == 0 { deselectedBackgroundColor(cell: deselectedCell!) selectedTime = "" selectedTimeIntervalArray.remove(at: indexPath.item) } else if indexPath.item == 1 { deselectedBackgroundColor(cell: deselectedCell!) selectedTime2 = "" selectedTimeIntervalArray.remove(at: indexPath.item) } } 

假设您在indexPath.item == 1处选择单元格。 那么你呢

 selectedTime2 = timeIntervalArray[indexPath.item] selectedTimeIntervalArray.append(selectedTime2) 

所以我们有: selectedTimeIntervalArray == ["ValueOfSelectedTime2"]

现在,我们取消选择该项目。 然后你这样做:

 selectedTimeIntervalArray.remove(at: indexPath.item) 

所以你在我们的案例中这样做:

 selectedTimeIntervalArray.remove(at: 1) 

指数1,真的吗? 不,这会导致崩溃。 因为selectedTimeIntervalArray只有一个项目,它在索引0处。

indexPath.item不是存储在数组中的对象的index

相反,首先检索正确的索引:

 let objectToRemove = timeIntervalArray[indexPath.item]‌ let index = selectedTimeIntervalArray.index(of: objectToRemove​) 

然后删除它:

  selectedTimeIntervalArray.remove(at: index)