Попытка вызова из вложенного массива в представлении SwiftUI - PullRequest
1 голос
/ 30 октября 2019

Итак, у меня есть модель [UserModel] с вложенными массивами [CityModel] и внутри этого [TownModel]. Я почти уверен, что модель настроена правильно, но я думаю, что у меня неправильный синтаксис при попытке ссылки на вложенные массивы.

Вот мой UserModel.swift:

import SwiftUI

struct UserModel: Codable, Identifiable {
    let id: Int
    let firstName: String
    let lastName: String
    let cities: [CityModel]

    enum CodingKeys: String, CodingKey {
        case id
        case firstName = "first_name"
        case lastName = "last_name"
        case cities
    }
}

struct CityModel: Codable {
    let name: String
    let towns: [TownModel]
}

struct TownModel: Codable {
    let name: String
}

Проблемаприходит в моем CityRow.swift, где я просто хотел бы отобразить название города (чтобы я мог затем назвать его в CityList и показать все города под пользователем).

struct CityRow: View {
    var city: [UserModel.CityModel]

    var body: some View {
        VStack(alignment: .leading) {
            Text(city.name)
                .font(.headline)
        }
    }
}

struct CityRow_Previews: PreviewProvider {
    static var previews: some View {
        CityRow(city: userData[0])
    }
}

Но я получаюэта ошибка при попытке записать мою переменную 'city'.

'CityModel' is not a member type of 'UserModel'

Я уверен, что мой синтаксис "var city: [UserModel.CityModel]" неверен, но не знаете, как это сделать иначе?

1 Ответ

1 голос
/ 30 октября 2019

Вашему CityRow нужен город, чтобы назвать его название. CityModel не является членом UserModel, но города. Я не знаю ваше приложение или то, что вы пытаетесь достичь, но, например, в списке вы хотите представить каждый город в массиве. Ваш CityRow нуждается в var city: CityModel в качестве конструктора. Это может выглядеть так (опять же, я понятия не имею, чего вы пытаетесь достичь, вам понадобится дополнительная информация / код!).

Вот ваш CityRow

struct CityRow: View {
    var city: CityModel

    var body: some View {
        VStack(alignment: .leading) {
            Text(city.name)
                .font(.headline)
        }
    }
}

Ивот цикл ForEach, который вы можете использовать в списке или что-то в этом роде

ForEach(user.cities) {city in
    CityRow(city: city)
}

Если бы вы могли отредактировать свой вопрос с помощью дополнительного кода, например представления, отображающего все CityRows, это было бы полезно!

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