Я пытаюсь понять, как изменить indexPaths вставки в collectionView для функции peformBatchUpdates с помощью .map
Скажем, у меня есть элементы 1 2 3 4 5 6 7 в collectionView и массив indexPaths для удаления как
▿ 2 elements
▿ 0 : 2 elements
- 0 : 0
- 1 : 0
▿ 1 : 2 elements
- 0 : 0
- 1 : 1
и массив indexPaths для вставки как
▿ 2 elements
▿ 0 : 2 elements
- 0 : 0
- 1 : 3
▿ 1 : 2 elements
- 0 : 0
- 1 : 4
Я считаю, что indexPaths вставки для операции performBatchUpdates необходимо рассчитать после того, как удаления были выполнены, поэтому, поскольку удаления - это первые 2 элемента в элементах collectionView, indexPath.item для insertIndexPaths необходимо уменьшить на 2, чтобы они вставлялись в правильная позиция, т.е. я хочу, чтобы окончательная вставкаIndexPaths была ...
▿ 2 elements
▿ 0 : 2 elements
- 0 : 0
- 1 : 1
▿ 1 : 2 elements
- 0 : 0
- 1 : 2
По сути, я думаю, что мне нужно проверить каждый indexPath.item в массиве insertIndexPath, посмотреть, сколько файлов deletionIndexPaths было перед этим insertIndexPath, и уменьшить insertIndexPath.item на это число.
Как я могу использовать .map для этих InsertIndexPaths, чтобы получить правильный результат?
Я смог сделать с
let adjustedPageDestinationIndexPaths = pageDestinationIndexPaths.map { ( indexPath ) -> IndexPath in
return IndexPath(item: indexPath.item - pageSourceIndexPaths.filter { $0.item < indexPath.item }.count , section: 0)
}
который дает правильные скорректированные indexPaths для примера ниже, перемещая только 2 элемента из позиций 0 и 1 в позиции 3 и 4, но теперь понял, что чем больше количество элементов перемещается за один раз в collectionView, тем большее количество элементов мне нужно track для вычисления корректировок исходного indexPath и target indexPath в каждом цикле. Вернуться к доске для рисования.