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

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 个对象(10 个 ID 的 5 页是(1 到 50))
用户拉动刷新我从 API 加载第一个页面(ID 1,2,3,4,5,6,7,10,11)然后如何识别哪个对象被删除 (8,9)

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

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

最佳答案

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

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

  • 取上次下载的对象中的键值。
  • 将键
  • 将您下载的数组与此子数组进行比较。
  • 下载数组中不在子数组中的对象应该被删除。
  • 关于ios - 如何识别从集合(数组)中删除的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52362870/

    10-11 23:12
    查看更多