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 final
frutas.insert("mango", at: 0) // insertar en una posición
let primera = frutas[0] // acceder por índice
frutas.remove(at: 1) // quitar
print(frutas.count) // cuántos hay
print(frutas.isEmpty) // ¿está vacío?
print(frutas.contains("uva")) // ¿contiene X?
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 actualizar
let edadAna = edades["Ana"] // Int? (opcional: la clave podría no existir)
edades["Luis"] = nil // eliminar
print(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 ignora
etiquetas.insert("swiftui")
print(etiquetas.contains("ios")) // true
// operaciones de conjuntos
let 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 valor
for (nombre, edad) in edades {
print("\(nombre) tiene \(edad) años")
}
// con el índice, si lo necesitas
for (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, 5
for i in 0..<frutas.count { } // 0 hasta count-1
while contador < 10 { contador += 1 } // while también existe
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.
- 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.