如何在 Swift 3 中重新排序核心数据对象数组并重新排序它的 Int 属性

Posted

技术标签:

【中文标题】如何在 Swift 3 中重新排序核心数据对象数组并重新排序它的 Int 属性【英文标题】:How to reorder array of Core Data Objects and reorder it's Int attributes in Swift 3 【发布时间】:2017-08-02 10:46:56 【问题描述】:

假设我有一个 Core Data 对象数组。

let array = [Object1, Object2, Object3, Object4, Object5, Object6, Object7]

每个对象都有一个名为 indexValue : Int64 的属性

首先,这些对象具有 indexValue 属性的这些值:

Object1 has indexValue = 1
Object2 has indexValue = 2
Object3 has indexValue = 3
Object4 has indexValue = 4
Object5 has indexValue = 5
Object6 has indexValue = 6
Object7 has indexValue = 7

现在假设,例如,我删除了 Object3 和 Object6,现在我的数组中的对象具有以下 indexValues

Object1 has indexValue = 1
Object2 has indexValue = 2
Object4 has indexValue = 4
Object5 has indexValue = 5
Object7 has indexValue = 7

删除后,我想按以下方式重新排序此数组: 我想将此数组的 indexValue 属性更改为以下状态:

Object1 has indexValue = 1
Object2 has indexValue = 2
Object4 has indexValue = 3
Object5 has indexValue = 4
Object7 has indexValue = 5

主要的困难是在保留旧顺序的同时给出 indexValue 的新值。我正在寻找一种算法来在 Swift 3 中实现这一点。

【问题讨论】:

那么你想让indexValue取数组中每个对象的真实索引的值吗? @nbloqs i++ 在 Swift 3 中不起作用,indexValueInt64 并且基于一个。 【参考方案1】:

简单的解决方案,使用此函数并传递有序的 - 缺少索引 - 数组。

您必须将MyObject 替换为包含indexValue 属性的实际自定义类型,并添加代码以保存托管对象上下文。

func reindex(items : [MyObject])

    for (index, item) in items.enumerated() 
        item.indexValue = Int64(index + 1)
    
    // save the context

【讨论】:

非常感谢,这正是我一直在寻找的!

以上是关于如何在 Swift 3 中重新排序核心数据对象数组并重新排序它的 Int 属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSFetchedResultsController 核心数据重新排序 TableView 单元格 - Swift 3

在 Swift 中自动重新排序核心数据

Swift 2.0 - 按子数组重新排列 JSON 对象

如何在 swift 中使用 fetchedresultscontroller 重新排序 tableview 行?

如何在swift 4中重新排序单元格后保存tableView顺序

如何在 swift 3 中从核心数据中删除对象