Ios 如何避免错误索引超出范围?
我尝试在集合单元格中选择多个项目,但是如果我多次点击取消选择单元格,我会得到一个错误线程1:致命错误:索引超出范围 在这一行Ios 如何避免错误索引超出范围?,ios,swift,xcode,collections,deselect,Ios,Swift,Xcode,Collections,Deselect,我尝试在集合单元格中选择多个项目,但是如果我多次点击取消选择单元格,我会得到一个错误线程1:致命错误:索引超出范围 在这一行indexPath.item==1上的selectedTimeIntervalArray.remove(位于:indexPath.item) 如何避免此错误 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let sele
indexPath.item==1
上的selectedTimeIntervalArray.remove(位于: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
不是存储在数组中的对象的索引
而是首先检索正确的索引:
let objectToRemove = timeIntervalArray[indexPath.item]
let index = selectedTimeIntervalArray.index(of: objectToRemove)
然后将其移除:
selectedTimeIntervalArray.remove(at: index)
如果将两个项添加到一个数组中并删除(在:0处),则该数组现在只包含一个项,因此删除(在:1处)时它将崩溃。我建议寻找一种不同的方法来存储所选状态。您不想执行selectedTimeIntervalArray.remove(位于:indexPath.item)
。索引不正确。indexPath.item
不是数组中对象的索引。相反,let index=timeIntervalArray.index(of:timeIntervalArray[indexPath.item]);timeIntervalArray.remove(at:index)
谢谢,我理解。它帮助了我。