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.
¿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.
Excelente clase explicado paso a paso el hacer el networking con Swift!
No entiendo quien se supone que trae la info para .name y .url, se que se toma el primer elemento ingresado y se accede a las propiedades, pero cual es el elemento?
me aparece este error en esta sección del código
Value of type 'PokemonData' has no member 'results'
let pokemon = decodeData.results?.map{
func performRequest(withurlString:String){// 1. Create/get URLiflet url =URL(string: urlString){// 2. Create the URL sessionlet session =URLSession(configuration:.default)// 3. Give the session a tasklet task = session.dataTask(with: url){ data, response, error iniflet error = error {print(error)}iflet safeData = data {iflet pokemon = self.parseJSON(pokemonData: safeData){print(pokemon)}}}// 4. Start the task task.resume()}}