es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el tipo [Product].Type (es decir, el tipo de un array de Product) no puede conformar al protocolo Decodable.

    Para solucionar esto, debes cambiar la firma de la función para que acepte un array de T en lugar de T:

    static func loadCache<t: decodable="">(fileName: String, type: [T.Type]) throws -> [T] {
        let data = try FileManager.loadCache(fileName: fileName)
        return try JSONDecoder().decode([T].self, from: data)
    }
    

    Luego, puedes llamar a la función de la siguiente manera:

    let products = try loadCache(fileName: Product.cacheFileName(), type: [Product].self)
    

    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 de Product en lugar de una instancia de un array de Product.

Comments are closed.