如何遍历没有 id 属性 的对象列表

How to iterate over a list of objects that do not have an id property

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

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 提供给列表,但这使得 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
    }
}