Convert Swift Classe codificável digitada como Qualquer no dicionário
Em conexão comminh anterio questõe, Decidi subclasseNSArrayController
para alcançar o comportamento desejad
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)
}
}
}
Isso funciona, mas e se eu quisesse algo que funcionasse para qualquerEncodable
classe, e não apenas uma com duas propriedades chamadasname
evalue
?
Basicamente, o problema é criar um dicionário a partir de uma classe, onde as chaves são os nomes das propriedades e os valores são os valores dessas propriedade
Eu tentei escrever algo assim:
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)
}
}
}
o entanto, recebo um erro de compilação:
Cannot invoke 'encode' with an argument list of type '(Encodable)'
1. Expected an argument list of type '(Value)'
Como faço para corrigir isso para compilar?