Colecciones: Array, Dictionary y Set
Las tres estructuras de datos que usarás a diario, cómo recorrerlas con bucles y rangos, y las operaciones que las hacen potentes.
Casi todo en una app es una colección de cosas: una lista de tareas, un mapa de ajustes, un conjunto de etiquetas. Swift te da tres estructuras para ello, todas con seguridad de tipos: sabes exactamente qué contienen.
- Arrays: listas ordenadas.
- Dictionaries: pares clave-valor.
- Sets: conjuntos sin duplicados.
- Recorrerlas con bucles y rangos.
Array: listas ordenadas
Una secuencia ordenada de elementos del mismo tipo:
var frutas = ["manzana", "pera", "uva"] // [String]frutas.append("kiwi") // añadir al finalfrutas.insert("mango", at: 0) // insertar en una posiciónlet primera = frutas[0] // acceder por índicefrutas.remove(at: 1) // quitarprint(frutas.count) // cuántos hayprint(frutas.isEmpty) // ¿está vacío?print(frutas.contains("uva")) // ¿contiene X?Cuidado con los índices
Acceder a frutas[10] cuando solo hay 4 elementos crashea. Para acceso seguro, comprueba antes (indices.contains) o usa first/last, que devuelven opcionales:
let primera = frutas.first // String? (nil si está vacío)Dictionary: clave → valor
Asocia claves únicas con valores. Ideal para buscar por identificador:
var edades = ["Ana": 30, "Luis": 25] // [String: Int]edades["Marta"] = 28 // añadir o actualizarlet edadAna = edades["Ana"] // Int? (opcional: la clave podría no existir)edades["Luis"] = nil // eliminarprint(edades.count)Fíjate: acceder por clave devuelve un opcional, porque esa clave podría no estar. Ahí vuelven a aparecer los opcionales de la lección anterior.
Set: sin duplicados
Un conjunto no ordenado de elementos únicos. Perfecto cuando no quieres repetidos y necesitas comprobar pertenencia rápido:
var etiquetas: Set<String> = ["swift", "ios", "swift"]print(etiquetas.count) // 2 — el duplicado se ignoraetiquetas.insert("swiftui")print(etiquetas.contains("ios")) // true// operaciones de conjuntoslet a: Set = [1, 2, 3]let b: Set = [3, 4, 5]print(a.intersection(b)) // {3}print(a.union(b)) // {1,2,3,4,5}Recorrer con bucles
El bucle for-in recorre cualquier colección:
for fruta in frutas { print(fruta)}// diccionario: clave y valorfor (nombre, edad) in edades { print("\(nombre) tiene \(edad) años")}// con el índice, si lo necesitasfor (i, fruta) in frutas.enumerated() { print("\(i): \(fruta)")}Rangos
Genera secuencias de números con ... (incluye el final) o ..< (lo excluye):
for i in 1...5 { print(i) } // 1, 2, 3, 4, 5for i in 0..<frutas.count { } // 0 hasta count-1while contador < 10 { contador += 1 } // while también existePiensa en colecciones, no en índices
Un reflejo de Swift maduro: en vez de bucles con índices manuales (for i in 0..<array.count), recorre directamente los elementos (for x in array) o usa operaciones de alto nivel (map, filter, reduce — próxima lección). El código queda más claro, más seguro (adiós errores de índice) y más cercano a lo que quieres expresar. Los índices son la excepción, no la norma.
Maneja datos de verdad
- Crea un array de tus lenguajes favoritos y añade uno con
append. - Crea un diccionario de
nombre: edady accede a una edad (fíjate que es opcional). - Crea un Set con duplicados y comprueba que se ignoran.
- Recorre el diccionario imprimiendo “X tiene Y años”.
- Usa un rango
1...10para imprimir los números en un bucle.