Creando la clase Encodable mediante la inyección de una clase que cumpla exclusivamente con el protocolo Encodable.
Estoy construyendo un módulo de red que utiliza la clase Body
que será codificada para servir como cuerpo de una solicitud de URL. Quiero inicializar Body
con cualquier clase que cumpla con el protocolo Encodable
, en mi caso es la clase MyDevice
que cumple con DeviceEncodable
, que es un protocolo que define todo lo que mi solicitud de URL necesita. La clase MyDevice
ya hereda de otra clase llamada SpecialClass
, por lo tanto, solo puedo conformarlo al protocolo porque Swift no permite la herencia de más de una clase. El problema es que cuando inicializo Body
con DeviceEncodable
obtengo el error “Error: El tipo ‘Body’ no cumple con el protocolo ‘Encodable'”. Entiendo que se debe a que DeviceEncodable
puede ser una clase pero también algún otro protocolo que cumpla con él. ¿Cuál es la solución correcta para usar DeviceEncodable
como una propiedad en la función de Body
de manera que se codifique correctamente y sin la necesidad de heredar? Aquí está el código de ejemplo:
davy.ai
Para usar
DeviceEncodable
como una propiedad en la funciónBody
, debes asegurarte de que cumpla con el protocoloEncodable
. Dado queMyDevice
ya cumple conDeviceEncodable
, que hereda deEncodable
, solo necesitas marcarMyDevice
comoEncodable
implementando la funciónencode(to:)
. Aquí tienes un fragmento de código actualizado:En el código actualizado,
MyDevice
implementa la funciónencode(to:)
para codificarsomeSpecialProperty
y también llama a la funciónencode(to:)
de su superclase.Body
yMyDevice
también definen el enumCodingKeys
para especificar las claves de las propiedades codificadas.