如何避免错误指数超出范围?
我尝试在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)