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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta