web-dev-qa-db-fra.com

Impossible de convertir la valeur de type '[tableau]' à la plage de type d'argument attendu 'int>'

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

8
Сева

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
1
MrAn3