Estructura básica de un For-in en Swift
for variable in secuencia {
// Código a ejecutar
}
Entendamos la estructura anterior:
- variable es una variable temporal que toma el valor de cada elemento en la secuencia durante cada iteración del bucle.
- secuencia puede ser un rango de números, una colección (como un array o un diccionario) o un string.
A continuación veamos un par de ejemplos para entender como funciona en cada caso.
Iterando elementos en un Array
let pokedex = ["Bulbasaur", "Charmander", "Squirtle", "Caterpie", "Weedle"]
for pokemon in pokedex {
print(pokemon)
}
- La primera línea de código declara un array llamado pokedex que contiene los nombres de cinco Pokémon diferentes: Bulbasaur, Charmander, Squirtle, Caterpie y Weedle.
- La segunda línea de código utiliza la estructura for-in para recorrer los elementos del array pokedex. En cada iteración del ciclo, la variable pokemon toma el valor del siguiente elemento del array. Es decir, la primera vez que se ejecuta el ciclo, pokemon tendrá el valor «Bulbasaur»; la segunda vez, tendrá el valor «Charmander», y así sucesivamente hasta que se recorran todos los elementos del array.
- La tercera línea de código utiliza la función print para imprimir el valor de la variable pokemon en la consola. En cada iteración del ciclo, se imprimirá el nombre de un Pokémon diferente.
Bulbasaur
Charmander
Squirtle
Caterpie
Weedle
Iterando elementos en un Diccionario
let pokedexDictionary = [
"Bulbasaur": ["type": "Grass/Poison", "evolution": ["Ivysaur", "Venusaur"]],
"Charmander": ["type": "Fire", "evolution": ["Charmeleon", "Charizard"]],
"Squirtle": ["type": "Water", "evolution": ["Wartortle", "Blastoise"]],
"Pikachu": ["type": "Electric", "evolution": ["Raichu"]],
"Eevee": ["type": "Normal", "evolution": ["Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon", "Sylveon"]]
]
for (pokemonName, pokemonInfo) in pokedexDictionary {
print("\(pokemonName):")
print("\tTipo: \(pokemonInfo["type"]!)")
print("\tEvolución: \(pokemonInfo["evolution"]!)")
}
- La primera línea de código define un diccionario llamado pokedexDictionary que contiene información sobre varios Pokémon. Cada Pokémon es una clave en el diccionario, y su valor es otro diccionario que contiene información adicional, como su tipo y su cadena de evolución.
- La segunda línea de código utiliza la estructura for-in para recorrer los elementos del diccionario. En cada iteración del ciclo, la variable pokemonName toma el valor de la clave actual del diccionario (es decir, el nombre del Pokémon), y la variable pokemonInfo toma el valor del diccionario asociado con esa clave (es decir, la información adicional del Pokémon).
- La tercera línea de código utiliza la función print para imprimir el nombre del Pokémon en la consola.
- La cuarta línea de código utiliza la función print nuevamente para imprimir información sobre el tipo del Pokémon en la consola, accediendo al diccionario pokemonInfo utilizando la clave type.
- La quinta línea de código utiliza la función print para imprimir información sobre la cadena de evolución del Pokémon en la consola, accediendo al diccionario pokemonInfo utilizando la clave evolution. Nótese que para acceder a los valores del diccionario, se utiliza la sintaxis de los corchetes [ ].
Bulbasaur:
Tipo: Grass/Poison
Evolución: ["Ivysaur", "Venusaur"]
Charmander:
Tipo: Fire
Evolución: ["Charmeleon", "Charizard"]
Squirtle:
Tipo: Water
Evolución: ["Wartortle", "Blastoise"]
Pikachu:
Tipo: Electric
Evolución: ["Raichu"]
Eevee:
Tipo: Normal
Evolución: ["Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon", "Sylveon"]
Iterando rangos
La estructura for-in también puede ser utilizada para recorrer un rango de valores.
Ejemplo:
let pokedex = ["Bulbasaur", "Charmander", "Squirtle", "Caterpie", "Weedle",
"Pidgey", "Rattata", "Spearow", "Ekans", "Pikachu", "Sandshrew"]
for i in 0..<7 {
print(pokedex[i])
}
- La primera línea de código declara un array llamado pokedex que contiene los nombres de varios Pokémon (11 Pokémon).
- La segunda línea de código utiliza la estructura for-in para recorrer un rango de valores que va desde 0 hasta 6. En cada iteración del ciclo, la variable i toma el valor del siguiente número en el rango. Es decir, la primera vez que se ejecuta el ciclo, i tendrá el valor 0; la segunda vez, tendrá el valor 1, y así sucesivamente hasta que se recorran los primeros 7 valores del rango (0,1,2,3,4,5,6).
- La tercera línea de código utiliza la función print para imprimir el valor del elemento del array pokedex que se encuentra en la posición i. Como i va desde 0 hasta 6, se imprimirán los primeros 7 elementos del array.
Bulbasaur
Charmander
Squirtle
Caterpie
Weedle
Pidgey
Rattata
Iterando un String
let pokemonTitle = "Pokemon"
for caracter in pokemonTitle {
print("Caracter actual: \(caracter)")
}
- La primera línea de código define un string llamado pokemonTitle que contiene la palabra «Pokemon».
- La segunda línea de código utiliza la estructura for-in para recorrer los caracteres del string pokemonTitle. En cada iteración del ciclo, la variable caracter toma el valor del siguiente carácter en el string. Es decir, la primera vez que se ejecuta el ciclo, caracter tendrá el valor «P»; la segunda vez, tendrá el valor «o», y así sucesivamente hasta que se recorran todos los caracteres del string.
- La tercera línea de código utiliza la función print para imprimir el valor de la variable caracter en la consola, junto con un mensaje que indica que se trata del «caracter actual».
Caracter actual: P
Caracter actual: o
Caracter actual: k
Caracter actual: e
Caracter actual: m
Caracter actual: o
Caracter actual: n
Conclusión
La estructura for-in es una herramienta esencial para cualquier desarrollador iOS que trabaje con arrays, diccionarios, strings y rangos. Permite recorrer y manipular elementos de una manera clara y eficiente.