SwiftUI在CoreData数据库中移动列表单元格并填充顺序

SwiftUI在CoreData数据库中移动列表单元格并填充顺序,swift,swiftui,swiftui-list,Swift,Swiftui,Swiftui List,我在移动单元格和在CoreData数据库中保存顺序时遇到问题。我已经实现了从UI角度的迁移,但我不知道如何在核心数据中镜像它。移动列表实体在CoreData中具有orderPriority属性,我希望在移动操作时更改该属性 附加到列表的移动方法如下所示: func move(from source: IndexSet, to destination: Int) 例如,似乎源和目标是两个不同的东西 将第一个单元格移动到第三个位置会得到source=0和destination=3,但是 将第三个单

我在移动单元格和在CoreData数据库中保存顺序时遇到问题。我已经实现了从UI角度的迁移,但我不知道如何在核心数据中镜像它。移动列表实体在CoreData中具有orderPriority属性,我希望在移动操作时更改该属性

附加到列表的移动方法如下所示:

func move(from source: IndexSet, to destination: Int)
例如,似乎源和目标是两个不同的东西 将第一个单元格移动到第三个位置会得到source=0和destination=3,但是 将第三个单元格移动到第一个位置会得到source=2和destination=0,数组destination中只有3个元素对我来说毫无意义

源看起来像数组索引,但目标是我无法理解的,这就是为什么我不能将核心数据实体更改为各自的顺序

我做错什么了吗

。。。但将第三个单元格移动到第一个位置会得到source=2和destination=0,数组destination中只有3个元素对我来说没有意义

数组索引从零开始,source=2是第三个元素,destination=0是第一个元素。索引2变为0,索引0变为1,索引1变为2

顺便说一下,源的类型是
IndexSet
,您可以将非后续索引中的多个项目移动到目标索引


默认情况下,核心数据记录是无序的。如果实体中有索引属性,则必须重新索引记录,至少从已更改的第一个索引开始。

您确实指出了一个缺陷,我决定从核心数据实体创建一个实际数组,然后应用本机swift move函数,并按实体ID更改数据库中的顺序。我确实理解了我给出的第二个示例,但为什么第一个示例中的destination=3?
destination=3
是最后一项之后的索引,
destination=2
是最后一项之前的索引。想象一个空数组,只有一个插入索引可用,索引0。非常感谢,我现在明白了!