No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Consumo de la Poke API

16/27
Recursos

Aportes 2

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Excelente clase explicado paso a paso el hacer el networking con Swift!

Utilizando compactMap en lugar de map en la funci贸n parseJSON

En el c贸digo de ejemplo proporcionado, se utiliza compactMap en lugar de map al mapear los resultados del JSON a objetos de modelo de Pok茅mon. Aqu铆 se argumenta por qu茅 se eligi贸 compactMap en esta situaci贸n.


La funci贸n compactMap es una variante de map que tiene la ventaja de eliminar los elementos nulos (opcionalmente en este caso) del resultado final. En el contexto de este c贸digo, la intenci贸n es mapear los resultados del JSON a objetos PokemonModel, pero solo se deben incluir aquellos resultados que tienen tanto un nombre como una URL v谩lida.


Al utilizar compactMap en lugar de map, podemos aprovechar la capacidad de compactMap para filtrar autom谩ticamente los elementos nulos del resultado. Esto evita la necesidad de realizar una operaci贸n de filtrado separada despu茅s del mapeo inicial.


En el c贸digo de ejemplo, dentro del closure de compactMap, se realiza una verificaci贸n condicional para asegurarse de que tanto el nombre como la URL sean no nulos. Si alguna de estas propiedades es nula, se devuelve nil. Esto garantiza que solo se incluyan en el resultado final los objetos PokemonModel que tengan tanto un nombre como una URL v谩lida.


En resumen, al utilizar compactMap en lugar de map, podemos mapear los resultados del JSON a objetos PokemonModel y, al mismo tiempo, filtrar autom谩ticamente los resultados nulos. Esto mejora la legibilidad del c贸digo y evita la necesidad de realizar una operaci贸n de filtrado separada.

func parseJSON(pokemonData: Data) -> [PokemonModel]? {
    let decoder = JSONDecoder()
    do {
        let decodeData = try decoder.decode(PokemonData.self, from: pokemonData)
        let pokemon = decodeData.results?.compactMap({
            if let name = $0.name, let imageURL = $0.url {
                return PokemonModel(name: name, imageURL: imageURL)
            }
            return nil
        })
        return pokemon
    } catch {
        return nil
    }
}

驴La soluci贸n que utiliza compactMap en lugar de map en el c贸digo proporcionado es eficiente?


En cuanto a la legibilidad, el uso de compactMap permite realizar la transformaci贸n y el filtrado en una sola operaci贸n, lo cual hace que el c贸digo sea m谩s conciso y f谩cil de entender. Al utilizar la clausura de compactMap para verificar y descartar los elementos nulos, se evita la necesidad de escribir una operaci贸n de filtrado separada despu茅s del mapeo inicial.


En t茅rminos de rendimiento, el uso de compactMap es eficiente ya que realiza el mapeo y filtrado en una sola pasada sobre la colecci贸n de resultados. Esto significa que no se necesita iterar dos veces sobre la colecci贸n, primero para el mapeo y luego para el filtrado. Adem谩s, compactMap aprovecha el mecanismo interno de optimizaci贸n de Swift para evitar asignar memoria adicional para los elementos nulos que se descartan.