Я предложу установить имена, отличные от The1945206
, так как они менее читабельны.Я буду использовать MapElement
вместо этого.Если вы знаете, что на карте будет только один элемент, и вы не хотите проверять, какой ключ связан с этим значением, вы можете использовать вычисленное свойство var value:MapElement?
, чтобы получить его.Возвращает необязательный, потому что словарь let map:[String:MapElement]
может быть пустым.
let json = """
{
"map": {
"1945206": {
"installBaseNUMB": 0,
"serialNumber": "KB1"
}
}
}
""".data(using: .utf8)!
struct Container: Codable {
let map:[String:MapElement]
var value:MapElement? {
return map.values.first
}
}
struct MapElement: Codable {
let installBaseNUMB: Int
let serialNumber: String
}
let res = try? JSONDecoder().decode(Container.self,from:json)
print(res?.value as Any)
Обновление:
Если вы хотите использовать несколько MapElement
, вы можете изменить var value:MapElement
на var values:[MapElement]
следующим образом:
struct Container: Codable {
let map:[String:MapElement]
var values:[MapElement] {
return map.values
}
}
Но имейте в виду, что вы храните данные в виде словаря, поэтому порядок элементов не гарантируется.