首先我附上场景图片:
我想添加相同的 subID 并将它们显示在一行中,同时添加它们的总数。应该有任何我找不到的简单数组追加或映射函数。我的 cellForRowAt indexPath: 看起来像这样:
var walletTransactionModel = [WalletTransactionModel]()
...
let cell = tableView.dequeueReusableCell(withIdentifier: "walletCell", for: indexPath)
let data = walletTransactionModel[indexPath.row - 1]
let myNumber = doubleToIntWhenDecimalZero(number: data.amount)
cell.textLabel?.text = "\(data.slug) | \(data.name) | \(myNumber)"
return cell
我的简单模型如下所示:
import Foundation
import SwiftyJSON
class WalletTransactionModel {
var slug: String
var name: String
var amount: Double
required init(slug: String, name: String, amount: Double) {
self.slug = slug
self.name = name
self.amount = amount
}
convenience init?(item: JSON) {
guard let slug = item["slug"].string,
let name = item["name"].string,
let amount = item["amount"].double else { return nil}
self.init(slug: slug, name: name, amount: amount)
}
}
如有任何帮助,我们将不胜感激。
最佳答案
我认为最好的办法是在尝试将数据显示在 TableView 中之前确保数据正确无误。加载数据后,运行一个处理步骤,将数据缩减为您想要的形式。
像这样(复制粘贴到 playground):
import Foundation
class WalletTransactionModel {
var slug: String
var name: String
var amount: Double
required init(slug: String, name: String, amount: Double) {
self.slug = slug
self.name = name
self.amount = amount
}
}
var data = [WalletTransactionModel(slug: "subID1", name: "James", amount: 1),
WalletTransactionModel(slug: "subID1", name: "James", amount: 2),
WalletTransactionModel(slug: "subID2", name: "Sarah", amount: 10),
WalletTransactionModel(slug: "subID2", name: "Sarah", amount: 20)]
var reducedData = data.reduce( [WalletTransactionModel]()) { (partial, model) in
var partial = partial
let matchingIndex = partial.firstIndex(where: { (existingModel) -> Bool in
existingModel.slug == model.slug
})
if let matchingIndex = matchingIndex {
partial[matchingIndex].amount += model.amount
} else {
partial.append(model)
}
return partial
}
for model in reducedData {
print("\(model.slug) \(model.amount)")
}
您可能可以更有效地执行此操作,但希望您清楚那里发生了什么。基本上它会减少您现有的数据,并在每个部分结果上检查该 id 是否已添加到新结果中。如果有,则将金额相加,否则将模型添加到新结果中。
这将处理您的数据,并创建一个新的数据数组。然后,您可以将其用作您的 TableView 数据源,除了显示该行外,您无需在 cellForRowAtIndex
中执行任何操作。
关于swift - 如何根据相同的 id 添加两行 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57566999/