Вот моя структура
struct AFilters: Codable {
let colors, sizes, materials,lining, price: MaterialsClass?
//let lining, price: Lining?
struct MaterialsClass: Codable {
let id: [Int]
let name: String
let items: ItemAny
}
enum ItemAny: Codable {
case anythingArray([JSONAny])
case itemMap([String: Item])
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let x = try? container.decode([JSONAny].self) {
self = .anythingArray(x)
return
}
if let x = try? container.decode([String: Item].self) {
self = .itemMap(x)
return
}
throw DecodingError.typeMismatch(Extenders.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Extenders"))
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .anythingArray(let x):
try container.encode(x)
case .itemMap(let x):
try container.encode(x)
}
}
}
struct Item: Codable {
let name: String
let value: String?
let active: Bool
}
}
}
Это типы ответов, которые могут исходить от API
"lining": {
"id": [6],
"name": "Подкладка",
"items": []
}
"materials": {
"id": [4],
"name": "Материал",
"items": {
"143": {
"name": "Полиэстер",
"value": null,
"active": false
}
}
}
Мне удалось проанализировать этот тип ответов в модели, а затем сохранить его в переменной
var filter = Afilters
filter = list.apiData.aFilters
Теперь я не могу получить данные об элементах, даже если ответ содержит dict
Как получить значения из фильтра?