Невозможно преобразовать значение типа '[массив]' в ожидаемый тип аргумента 'Диапазон <Int>' - PullRequest
0 голосов
/ 22 октября 2019

Не могу понять в чем может быть проблема

у меня какой-то Json например есть

[
{
    "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"
            },
            ....
        ],
}
]

и моя модель

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

}

и в чем проблема... я пытаюсь создать метод forEach для горизонтальной коллекции для свойств

Я частично преуспел, я реализовал этот метод с помощью вложенного массива, и он даже правильно генерирует количество ячеек. вау!)

но когда я хочу присвоить значения для текста по индексу, это выдает ошибку ...

Я на самом деле не могу понять проблему, так как массив уже былрассчитывается и создается по количеству объектов ячейки.

, но когда я спрашиваю формулу о присвоении значений, я получаю

Cannot convert value of type '[Unicards.HPropert]' to expected argument type 'Range<Int>'

мой код ниже

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])
    }
}
}

но если я скажу

properties[0].label 

ошибок не будет

1 Ответ

2 голосов
/ 22 октября 2019

Попробуйте сделать что-то вроде этого:

ForEach(properties) { card in
    .
    Text(card?.label) 
    .
}

Я думаю, проблема в том, что каждый элемент в массиве упоминается как card, когда вы выполняете итерацию по массиву. Таким образом, чтобы получить свойства этого элемента в массиве, вы должны сделать это: card?.[property_name]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...