如何迭代没有id属性的对象列表



以下是我从网络调用中填充的两个模型的示例。

struct CombinedValueModel : Codable{
let identifiers: [ValueModel]
let descriptors: [ValueModel]
let amount: Double
}
struct ValueModel : Codable, Identifiable{
let id: String
let name: String?
let value: String
}

我试图在列表中使用它们,但CombinedValueModel不符合Identifiable。模型包含CombinedValueModels的列表。

List(Model.values){ value in
Text("$(value.amount, specifier: "%.2f")")
}

我如何使迭代值成为可能?

我曾尝试将id:\.self赋予List,但这使得CombinedValueModel必须符合Hashable,从而实现您自己的"=="函数。这导致ValueModel符合EquatableHashable

有更简单的方法吗?

您可以使用从CodingKeys中排除的id属性来遵守Identifiable协议。使用UUID为结构的每个实例手动生成一个唯一的标识符,如下所示:

struct CombinedValueModel: Codable, Identifiable {
let identifiers: [ValueModel]
let descriptors: [ValueModel]
let amount: Double
let id = UUID().uuidString
// Need to add CodingKeys enum to exclude id from being decoded
enum CodingKeys: CodingKey {
case identifiers
case descriptors
case amount
}
}

相关内容

  • 没有找到相关文章

最新更新