首页 > 解决方案 > 如何识别从集合(数组)中删除的对象?

问题描述

我有以下代码来处理拉动刷新响应

let copyData = data.reversed() // it is pull to refresh response (load page 1)
for (_,element) in copyData.enumerated() {
    let foundElement = allObjects.filter{$0.id == element.id} // Find  element in main array
    if let firstElement = foundElement.first, let index =   allObjects.index(of: firstElement) {
        allObjects[index] = element // Replace if found
    } else {
        allObjects.insert(element, at: 0) // Insert if not found 
    }
}


self.arrayPosts = allObjects 

可编码类在哪里data,它是拉动刷新的 API 响应。allObjects是带有分页的预加载数据

问题:假设在allObjects我有 50 个对象(5 个 10 个 ID 的页面是(1 到 50))用户拉刷新我从 API 加载第一页(ID 1,2,3,4,5,6,7,10, 11)那么如何识别哪个对象被删除(8,9)

我应该将allObjects第 10 个索引与data第 10 个索引对象的 ID 进行比较吗?

这是更好的处理方法吗?请建议

标签: iosarraysswift

解决方案


不要比较页面(即一次 10 个项目) - 如果添加/删除一个项目,页面将不同步,您最终会丢失/重复对象。

大概你的对象是按一些键/日期等排序的。

  • 取最后一个下载对象中键的值。
  • 将所有具有键 <= 最后一个键的现有对象复制到一个新数组中。
  • 将您下载的阵列与此子阵列进行比较。
  • 应删除已下载数组中不在子数组中的对象。

推荐阅读