Je ne peux pas comprendre ce qui pourrait être le problème
j'ai un peu de Json par exemple est
[
{
"id": 1,
"title": "Title",
"info": "info",
"brand": "brand",
"model": "MODEL",
"make_year": year,
"properties": [
{
"id": 1,
"icon": "ic_rgb",
"label": "color",
"value": "red"
},
{
"id": 2,
"icon": "ic_car",
"label": "type",
"value": "value"
},
{ "id": 3,
"icon": "ic_fuel",
"label": "fuel",
"value": "gas"
}
],
},
{
"id": 2,
"title": "title2",
"message": "massage2",
"info": "wow you are amazing, thanks for the help",
"properties": [
{
"id": 11,
"icon": "ic_rgb",
"label": "2color",
"value": "2blue"
},
{
"id": 21,
"icon": "ic_car",
"label": "2type",
"value": "2cgh"
},
{ "id": 31,
"icon": "ic_fuel",
"label": "fuel",
"value": "test"
},
....
],
}
]
et mon modèle
struct Unicards: Hashable, Codable, Identifiable {
var id: Int
var title: String?
var info: String?
var brand: String?
var model: String?
var make_year: Int?
var messege: String?
var messege_color: String?
var price: String?
var price_currency: String?
var price_tooltip: String?
var properties: [HPropert]?
struct HPropert: Hashable, Codable, Identifiable {
var id: Int
var icon: String?
var label: String
var value: String
}
et quel problème ... j'essaie de créer une méthode foreach pour la collecte horizontale pour les propriétés
J'ai participé partiellement, j'ai mis en œuvre cette méthode avec une matrice imbriquée et génère même le nombre de cellules correctement. Wow!)
mais quand je veux affecter des valeurs pour le texte par index, il donne une erreur ...
En fait, je ne peux pas comprendre le problème, car le tableau a déjà été calculé et créé par le nombre d'objets de cellule.
mais quand je demande à la formule d'affecter des valeurs, je reçois
Cannot convert value of type '[Unicards.HPropert]' to expected argument type 'Range<Int>'
mon code ci-dessous
struct Card_cell_rowOfCheracteristics: View {
var data2: Unicards
var body: some View {
let properties = data2.properties!
return VStack() {
// Text("thanx bro!. have a Nice day")
// .font(.system(size: 14))
// .font(.headline)
// .fontWeight(.light)
// .multilineTextAlignment(.leading)
ScrollView(Axis.Set.horizontal) {
HStack {
ForEach(properties) { card in <--- Cannot convert value of type '[Unicards.HPropert]' to expected argument type 'Range<Int>'
VStack {
Image()
.resizable()
.scaledToFit()
.frame(width: 34, height: 34)
VStack {
Text(properties[card].label)
.font(.system(size: 14))
.fontWeight(.medium)
Text(properties[card].value)
.font(.system(size: 14))
}
}
}
}
}
}
}
struct Card_cell_rowOfCheracteristics_Previews: PreviewProvider {
static var previews: some View {
Card_cell_rowOfCheracteristics(data2: PlatesData[0])
}
}
}
mais si je dis
properties[0].label
aucune erreur ne se produit
Comme @undergroundfox pointa, une manière de résoudre ce problème est conforme au protocole Identifiable
. Un autre consiste à spécifier dans la clé ForEach
une clé pour servir d'identifiant unique, dans mon cas, j'ai utilisé une date que je connais est unique (parce que j'ai une entrée par jour):
ForEach(arPictures, id: \.date) { picture in