У меня есть следующий объект
struct Properties: Decodable {
var id: String?
var value: String?
var color: String?
}
В первом запросе к серверу я получаю следующий ответ
{
"id":"1",
"color":"red"
}
И после другого запроса я получаю
{
"id":"1", // the id of the object props is meant for
"props":{
"value":"my value" // I can get any property here
}
}
После двух запросов у меня должен быть установлен объект со всеми свойствами
. Сейчас я декодирую второй запрос следующим образом
struct SetAttr: Decodable {
let id: String
let props: [String : Any]
enum SetAttrCodingKeys: String, CodingKey {
case id
case props
}
init(from decoder: Decoder) throws {
let container = try! decoder.container(keyedBy: SetAttrCodingKeys.self)
props = try! container.decode([String : Any].self, forKey: .props)
id = try! container.decode(String.self, forKey: .id)
}
}
Но я не знаю, как разобрать props
словарь и установить свойства первого объекта. Я хочу использовать библиотеку декодирования, но я не нашел ни одной, которая могла бы сделать это
РЕДАКТИРОВАТЬ:
Вот как я пытался установить свойства из словаря, но решение не масштабируемый
var myObject: Properties
properties = setAttr.props // [String:Any]
let keys = properties.keys
keys.forEach { key in
if let value = properties[key] {
switch key {
case "value":
myObject.value = value as? String
case "color":
myObject.color = value as? String
default:
break
}
}
}