Я пытаюсь преобразовать «Object Mapper» в «Codable». Мой ответ, полученный от службы, включает NSArray
, который включает настраиваемые объекты. Мне нужно использовать NSArray
и NSDictionary
в классе Codable. Но мне это не удалось. Я попытался использовать стороннюю библиотеку, такую как AnyCodable, но снова потерпел неудачу . Я не могу изменить ответ на стороне сервера. Он должен быть в виде массива. Я должен использовать массив. У вас есть предложения или информация?
class Person : Codable { //Error 1
var name: String?
var data: NSArray?
private enum CodingKeys : String, CodingKey {
case name
case data
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(name, forKey: .name)
try container.encode(data, forKey: .data) //Error 2
}
func decode(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.name = try container.decode(String.self, forKey: .name)
self.data = try container.decode(NSArray.self, forKey: .data) //Error 3
}
}
Ошибка 1: "Тип" Человек "не соответствует протоколу" Декодируемый ""
Ошибка 2: «Тип аргумента 'NSArray' не соответствует ожидаемому типу 'Encodable'»
Ошибка 3: «Метод экземпляра 'decode (_: forKey :)' требует, чтобы 'NSArray' соответствовал 'Decodable'»
Образец ответа здесь. Все элементы в массиве имеют разное содержимое. Каждый элемент в массиве имеет разный тип.
{
"data": [
{
"languageCode": "EN",
"deviceInformation": {
"screenSize": "height:812.0 width:375.0",
"connectionType": "wifi",
"deviceType": "iPhone",
"deviceCode": "D01D304C-D05C-4443-9A92-031C55D14XC7",
"operatingSystemVersion": "12.2",
"applicationVersion": "1.0"
},
"lastUpdatedParamDate": "13.05.2019 14:44:24",
"skipOptionalUpdate": 0
}
]
}