Быстрое получение данных JSON в структуру и заполнение pickerViews
Я пишу приложение, в котором я хочу заполнить 2 зависимых UIPickerViews марками и моделями автомобилей.
Я анализирую следующий файл 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()
Я получаю эту ошибку на 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 ответ
Теперь у меня есть этот массив на моих 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"
Я должен взять все марки автомобилей в списке, а затем, по выбору пользователя, заполнить другой сборщик моделями автомобилей. Не могли бы вы сказать мне, как это сделать, пожалуйста?
Извините, я новичок. Спасибо, что нашли время ответить.:)