首页 > 解决方案 > 比较两个包含自定义 Swift 对象的数组之间的数据

问题描述

我有一些通过 API 收到的数据,这些数据将 JSON 返回给我。我知道我可以获取它并将 API 中的相关信息存储到我的 iOS 应用程序中。但仅在应用程序运行时。IE 我还没有实现如何将从 API 获取的信息存储到 UserDefalults 中。在使用此功能时,我遇到了一个问题。

我有两个数组来跟踪我的数据。第一个数组是我在获取数据时想要存储在 UserDefaults 中的数组。这个叫做“lenders”,保存着 LenderData 第二个 Array 是我的临时 Array。它包含相同类型的对象,这是我想用来自 API 的数据填充的对象,然后与我现有的数组“贷方”进行比较。

我想检查“lenders”数组是否包含与我在“lendersTemp”数组中查看的对象具有相同 ID 的任何对象。如果贷方数组不包含任何具有我们当前正在查看的 tempLender 的 ID 的 LederData 对象,我们将 tempLender 添加到贷方数组中。我该怎么做呢?

我当前的(非工作)解决方案如下:

var lenders = [LenderData]()
var lendersTemp = [LenderData]()

...
// Get JSON DATA
...

for tempLender in self.lendersTemp {
    if !self.lenders.contains(where: {$0.id == tempLender.id}) {
        self.lenders.append(tempLender)
     }
}

编辑: 我的观点确实加载方法:

var lenders = [LenderData]()
var lendersTemp = [LenderData]()

override func viewDidLoad() {
    super.viewDidLoad()

    downloadJSON {
        self.myTableView.reloadData()
    }

    self.myTableView.rowHeight = 90
    myTableView.delegate = self
    myTableView.dataSource = self
}

标签: arraysswift

解决方案


我在一些帮助下想通了!所以这是我对自己问题的回答!

我的问题是从我的 API 获取数据是通过 asyc 方法完成的。在我的 TableView 上调用 reload 方法后,我尝试进行比较。因此,在调用之前,我没有填充 tableview 从中获取数据的数组,reloadData()因此看起来我的 tableview 和比较算法不起作用,而实际上它确实起作用了!


推荐阅读