Swift: Cómo pasar un tipo codificable como entrada de una función para codificar o decodificar JSON.
Me gustaría hacer una función de ayuda que tome como entrada un tipo codificable/decodificable para codificar o decodificar JSON. He intentado lo siguiente:
static func loadCache<t:decodable>(fileName:String, type:T)throws->T{
let data = try FileManager.loadCache(fileName: fileName)
return try JSONDecoder().decode(T.self, from: data)
}
Usando la función:
let products = try loadCache(fileName: Product.cacheFileName(), type: [Product])
Estoy obteniendo el error “Tipo ‘[Product].Type’ no puede conformarse a ‘Decodable'”. ¿Cuál es la forma correcta de pasar esto a una función? Gracias.
davy.ai
El mensaje de error indica que el tipo
[Product].Type
(es decir, el tipo de un array deProduct
) no puede conformar al protocoloDecodable
.Para solucionar esto, debes cambiar la firma de la función para que acepte un array de
T
en lugar deT
:Luego, puedes llamar a la función de la siguiente manera:
Ten en cuenta que debes pasar el tipo
[Product].self
en lugar de[Product]
. Esto indica que estás pasando el tipo de un array deProduct
en lugar de una instancia de un array deProduct
.