如何遍历没有 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 符合 Equatable
和 Hashable
.
有更简单的方法吗?
您可以使用从 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
}
}
这些是我从网络调用中填充的两个模型的示例。
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 符合 Equatable
和 Hashable
.
有更简单的方法吗?
您可以使用从 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
}
}