【发布时间】:2020-07-09 04:34:09
【问题描述】:
我有一个显示 CoreData FetchedResults 的列表。 我想实现移动行并同时更新实体的 order 属性的可能性。 FetchedResults 不是数组,所以我不能使用数组的 move 属性。 我就是这样实现的,但效果不是很好。
func move(fromOffsets: IndexSet, toOffset: Int) {
var orders: [Int16] = Array(1...Int16(myEntities.count))
orders.move(fromOffsets: fromOffsets, toOffset: toOffset)
for (entity, order) in zip(myEntities, orders) {
entity.order = order
}
}
在我的代码中,我得到一个当前订单的数组,我执行移动,然后重新分配它们。
我认为最好的选择是为Collection where Element: MyEntity, Index == Int 创建一个自定义移动属性。
有什么想法吗?
要重新创建场景,您可以轻松启动新的 SwiftUI Master-Detail 项目并选择 CoreData 选项,然后只需将 order 属性添加到实体
(记得用NSSortDescriptor(keyPath: \MyEntity.order, ascending: true)]对@FetchRequest进行排序)
【问题讨论】:
-
没有更好的主意,非常相似!
-
这只是在下班后帮助了我!谢谢!类似的代码根本不适合我——对顺序数组进行排序然后用对象数组压缩似乎是解决办法。 UI 仍然是一个小问题,需要刷新,但几乎就在那里! :)
标签: swift core-data swiftui swiftui-list