Быстрое получение данных JSON в структуру и заполнение pickerViews - PullRequest
0 голосов
/ 19 октября 2018

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

Я анализирую следующий файл json на входе, содержащий входные данные для моделей автомобилей:

[{
"brand": "ALFA ROMEO",
"models": [
    "Mito (145)",
    "145/146 (930)",
    "147 (937)",
    "Giulietta (940)",
    "155 (167)",
    "156 (932)",
    "159 (939)",
    "Giulia (620)",
    "164 (164)",
    "166 (136)",
    "GTV / Spider (916)",
    "Brera",
    "Spider (939)",
    "GT Coupé (937)",
    "4C (643)",
    "Stelvio (630)"
]},
{
"brand": "AMC",
"models": [
  "Alliance",
  "Concord",
  "Eagle",
  "Encore",
  "Spirit"
]
},
...
]

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

Я использовал следующую структуру для анализа и получения jsondata

struct carBrands : Codable {
let brand : String
let models : [String]
}

Эта функция позволяет мне анализировать json и получать объект автомобилей, который зависит от структуры

var cars:carBrands?

А вот декодер json

let url = Bundle.main.url(forResource: "carModels", withExtension: "json")
    /*let jsonData = try? Data(contentsOf: url!)
    let jsonResponse = try? JSONSerialization.jsonObject(with: jsonData!)*/

    URLSession.shared.dataTask(with: url!) { (data, response
        , error) in

        guard let data = data else { return }
        do {
            let decoder = JSONDecoder()
            let carData = try decoder.decode(carBrands.self, from: data)
            print(carData)
            self.cars = carData
            return
        }catch let err {
            print("Err", err)
        }
    }.resume()

Iполучите эту ошибку на xcode

Err typeMismatch(Swift.Dictionary<Swift.String, Any>,     Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))

Не могли бы вы показать ле хитрости, чтобы правильно заполнить мои uipickerviews?

Спасибо.

1 Ответ

0 голосов
/ 19 октября 2018

Теперь у меня есть этот массив в моих self.cars

▿ Optional<Array<carBrands>>
  ▿ some : 70 elements
    ▿ 0 : carBrands
      - brand : "ALFA ROMEO"
      ▿ models : 16 elements
    - 0 : "Mito (145)"
    - 1 : "145/146 (930)"
    - 2 : "147 (937)"
    - 3 : "Giulietta (940)"
    - 4 : "155 (167)"
    - 5 : "156 (932)"
    - 6 : "159 (939)"
    - 7 : "Giulia (620)"
    - 8 : "164 (164)"
    - 9 : "166 (136)"
    - 10 : "GTV / Spider (916)"
    - 11 : "Brera"
    - 12 : "Spider (939)"
    - 13 : "GT Coupé (937)"
    - 14 : "4C (643)"
    - 15 : "Stelvio (630)"
▿ 1 : carBrands
  - brand : "AMC"
  ▿ models : 5 elements
    - 0 : "Alliance"
    - 1 : "Concord"
    - 2 : "Eagle"
    - 3 : "Encore"
    - 4 : "Spirit"
▿ 2 : carBrands
  - brand : "Aston Martin"
  ▿ models : 9 elements
    - 0 : "DB7"
    - 1 : "DB9"
    - 2 : "DBS"
    - 3 : "Lagonda"
    - 4 : "Rapide"
    - 5 : "V12 Vantage"
    - 6 : "V8 Vantage"
    - 7 : "Vanquish"
    - 8 : "Virage"

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

Извините, я новичок.Спасибо, что нашли время ответить.:)

...