В одном из моих приложений я применил подход добавления свойства последовательности (свойства позиции, как вы говорите в своем вопросе). Когда я делаю запрос из CloudKit, чтобы получить все элементы, я упорядочиваю по свойству sequence, и затем все отображается в правильном порядке в табличном представлении.
Для редактирования / изменения порядка я использую функцию MoveRowAt (), чтобы позволить пользователю перетаскивать и изменять порядок элементов в таблице (пример ниже).
После перемещения объекта Я запускаю a для каждого l oop, чтобы обновить свойство sequence всех элементов, чтобы отразить новую последовательность.
override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let movedObject = self.headlines[sourceIndexPath.row]
headlines.remove(at: sourceIndexPath.row)
headlines.insert(movedObject, at: destinationIndexPath.row)
}
Пример выше из: https://www.ralfebert.de/ios-examples/uikit/uitableviewcontroller/reorderable-cells/
Затем я сохраняю обновленный набор элементов (сначала локально в Core Data в моем приложении, а затем pu sh в CloudKit позже ... но вы можете делать все, что для вас наиболее разумно).
Пропущенная или дублирующая позиция может быть легко обработана при создании таблицы, но если вы превысите oop каждый элемент в событии перемещения, тогда у вас не должно быть этой проблемы в любом случае.
Не уверен, что я следую за проблемой «слияния» - можете уточнить?