我有一个注释数组声明为:var comments: [String]
我用一些字符串填充它,我还有一个UICollectionView
我在其中提出注释。当我尝试从UICollectionView中删除所选单元格时,我的代码如下:
if let indexPathsForSelectedItems = collectionView.indexPathsForSelectedItems {
for indexPath in indexPathsForSelectedItems {
comments.remove(at: indexPath.item) //I have only one section
}
collectionView.deleteItems(at: indexPathsForSelectedItems)
}
问题在于,有时当我删除所选项时,它会在comments数组中创建一个越界异常。
但是,当我使用以下方法(创建一个复制数组并用其副本替换原始数组)时,不会出现问题:
var indexes: [Int] = []
for indexPath in indexPathsForSelectedItems {
indexes.append(indexPath.item)
}
var newComments: [String] = []
for (index, comment) in comments.enumerated() {
if !indexes.contains(index) {
newComments.append(comment)
}
}
comments = newComments
为什么会这样?
我正在使用Swift 3和XCode 8.2.1
答案 0 :(得分:2)
排序
如果您确定 indexPathsForSelectedItems
按降序排序,因此始终先删除最高索引,最终会遇到越界。删除项目将更改具有更高索引的所有数组元素的索引。
您可能想要使用indexPathsForSelectedItems.sorted(by: >)
。