0Pricing
Swift Academy · Lección

map y compactMap

Transforme elementos y descarte los valores nil.

map y compactMap es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué es map?

map es una función de orden superior: recibe un closure y lo aplica a cada elemento de una secuencia, devolviendo un nuevo array con los resultados transformados.

  • La colección original nunca se modifica
  • La cantidad de resultados siempre es igual a la cantidad de elementos de entrada
  • El tipo de elemento puede cambiar (por ejemplo, Int → String)

Un map sencillo

Duplicar cada número de un array:

let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled)  // [2, 4, 6, 8]

Cambiar el tipo de elemento

map puede transformar valores Int en valores String:

let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels)  // ["ID-10", "ID-20", "ID-30"]

map con una función con nombre

Puede pasar cualquier función con una signatura compatible, no solo un trailing closure:

let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper)  // ["SWIFT", "MAP"]

El problema que map no puede resolver

map conserva todos los elementos. Si la transformación devuelve un opcional (puede fallar), termina con un array de opcionales como [Int?], lleno de elementos nil que debe filtrar después.

Eso es precisamente lo que resuelve compactMap.

Aparece compactMap

compactMap transforma cada elemento y descarta cualquier resultado que sea nil, devolviendo un array no opcional:

let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums)  // [1, 2, 4]  -- "x" was dropped

map y compactMap, lado a lado

La diferencia está en si los resultados nil se conservan:

let raw = ["1", "x", "3"]
print(raw.map { Int($0) })       // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]

Desenvolver opcionales en una colección

compactMap es la forma idiomática de eliminar los nil de un array de opcionales:

let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean)  // [1, 3, 5]

Analizar con compactMap

Un uso habitual en situaciones reales: analizar solo las líneas válidas de la entrada:

let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values)      // [42, 7]
print(values.reduce(0, +))  // 49

Combinar map y compactMap

Puede encadenarlos: use map para dar forma a los datos y compactMap para conservar solo los resultados correctos:

let scores = ["90", "85", "n/a", "70"]
let passed = scores
    .compactMap { Int($0) }
    .map { $0 >= 80 ? "pass" : "fail" }
print(passed)  // ["pass", "pass", "fail"]

compactMap en cadenas de opcionales

También funciona muy bien con el acceso opcional a propiedades:

struct User { let name: String? }
let users = [User(name: "Ann"), User(name: nil), User(name: "Bo")]
let names = users.compactMap { $0.name }
print(names)  // ["Ann", "Bo"]

Comprobación rápida

¿Qué función transforma los elementos y elimina los resultados nil en un solo paso?

Repaso

Ha aprendido las dos funciones de transformación principales:

  • map — transforma cada elemento; la cantidad de resultados es igual a la cantidad de elementos de entrada
  • compactMap — transforma y descarta los valores nil; es ideal para analizar datos y desenvolver opcionales
  • Ambas devuelven nuevos arrays y nunca modifican la fuente
  • Puede encadenarlas para dar forma a los datos y filtrarlos de forma clara

A continuación: filtrar con predicados.

Preguntas frecuentes

¿La lección «map y compactMap» es gratis?

Sí — el texto completo de «map y compactMap» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «map y compactMap»?

Transforme elementos y descarte los valores nil. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «map y compactMap»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. map y compactMap
  2. filter y predicados
  3. reduce y reduce(into:)
  4. flatMap y encadenamiento
← Volver a Swift Academy