Convertir Swift Encodable clase escrita como Cualquiera para diccionario
En conexión conm anterio preguntas, Decidí subclaseNSArrayController
para lograr el comportamiento deseado.
class NSPresetArrayController: NSArrayController {
override func addObject(_ object: Any) {
if let preset = object as? Preset {
super.addObject(["name": preset.name, "value": preset.value])
} else {
super.addObject(object)
}
}
}
Esto funciona, pero ¿y si quisiera algo que funcione para cualquierEncodable
clase, y no solo una con dos propiedades llamadasname
yvalue
?
ásicamente, el problema es crear un diccionario a partir de una clase, donde las claves son los nombres de las propiedades y los valores son los valores de estas propiedades.
Intenté escribir algo como esto:
class NSPresetArrayController: NSArrayController {
override func addObject(_ object: Any) {
if let encodableObject = object as? Encodable {
let data = try! PropertyListEncoder().encode(encodableObject)
let any = try! PropertyListSerialization.propertyList(from: data, options: [], format: nil)
super.addObject(any)
}
}
}
Sin embargo, recibo un error de compilación:
Cannot invoke 'encode' with an argument list of type '(Encodable)'
1. Expected an argument list of type '(Value)'
¿Cómo soluciono esto para que se compile?