Excelente clase explicado paso a paso el hacer el networking con Swift!
Primeros pasos en Swift
Bienvenida a los Storyboards de Swift
¿Qué es Swift?
Recursos necesarios para programar en Swift
Instalación de Xcode
Mi primera app en Swift
Configurar un proyecto desde cero en Xcode
Diseño de una aplicación usando componentes del UIKit para Storyboards
Importación de imágenes a los Storyboards
Stackviews y Constraints
Crear y utilizar íconos personalizados
Reto: replica la interfaz de calculadora del iPhone y muéstranos el resultado
Setup
Clonar el proyecto con la UI creada en Figma
Cambiar elementos de forma programática
Modelo Vista Controlador de nuestra app en Swift
Obtener las respuestas del usuario
Revisión de la Poke API y creación del modelo de datos
Consumo de la Poke API
Extender la funcionalidad del controlador
Lógica del juego
Generar números aleatorios
Image manager
Game model del juego
Validación de las respuestas del jugador
Score y reset del juego
Flujo de storyboards
Navegación entre vistas
Resultado final de nuestra app
Ejecución
Ejecutar nuestra aplicación en un iPhone
Despedida
Siguientes pasos en Swift
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 2
Preguntas 1
Excelente clase explicado paso a paso el hacer el networking con Swift!
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 demap
, podemos mapear los resultados del JSON a objetosPokemonModel
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
}
}
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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.