以下是我从网络调用中填充的两个模型的示例。
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符合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
}
}