Swift ofrece unha variedade de instrucións de control de fluxo.
- Bucles
while
para realizar unha tarefa varias veces - Instrucións
if
,guard
eswitch
para executar diferentes ramas de código en función de determinadas condicións - Instrucións como
break
para romper econtinue
para continuar transferindo o fluxo de execución a outro punto do código. - Bucle
for-in
que facilita o recorrido de matrices, dicionarios, intervalos, cadeas e outras secuencias.
for-in #
Usamos o bucle for-in
para iterar sobre unha secuencia, como elementos dunha matriz, intervalos de números ou caracteres dunha cadea.
var nombres = ["Pepe","Amelia","Lucía","Diego"]
for nombre in nombres {
print("\(nombre)")
}
Aínda que non os vimos, tamén podemos recorrer un dicionario. Cada elemento devólvese como unha tupla (clave
, valor
):
var numPatas = ["araña":8, "hormiga":6, "gato":4]
for (nombreAnimal, patas) in numPatas{
print("El/la \(nombreAnimal) tiene \(patas) patas")
}
Podemos percorrer un Array
e engadir unha condición. Para eso usamos where
de xeito que podemos iterar o noso Array mentres se cumpra a condición do where
.
Así, no seguinte exemplo imprimimos recorremos o array nombres
e visualizamos os elementos do array, neste caso cadeas String
, sempre e cando a cadea do array teña un tamaño menor que seis:
var nombres = ["Pepe","Amelia","Lucía","Diego"]
for nombre in nombres where nombre.count < 6 {
print("\(nombre)")
}
//Imprime "Pepe", "Lucia" e "Diego", pero non "Amelia"
Rangos #
Tamén podemos usar bucles for-in con intervalos numéricos:
for i in 1...5 {
print("For: \(i)")
}
for i in 1..<5 {
print("For: \(i)")
}
Rango pechado #
O operador de rango pechado (a...b
) define un rango que vai de a
a b
.
- Inclúe os valores
a
eb
. - O valor de
a
non debe ser maior que o deb
.
É útil ao iterar sobre un rango, como no caso dun ciclo for-in
:
for index in 1...5 {
print("\(index) multiplicado por 5 es \(index * 5)")
}
// 1 multiplicado por 5 es 5
// 2 multiplicado por 5 es 10
// 3 multiplicado por 5 es 15
// 4 multiplicado por 5 es 20
// 5 multiplicado por 5 es 25
Rango semiaberto #
O operador de rango semiabierto (a..<b
) define un rango que vai de a
a b
, pero non inclúe a b
.
Os rangos semiabiertos son particularmente útiles ao traballar con arrays:
let nombres = ["Ana", "Alejandro", "Cindy", "Laura"]
let conteo = nombres.count
for i in 0..<conteo {
print("La persona #\(i + 1) se llama \(nombres[i])")
}
// La persona #1 se llama Ana
// La persona #2 se llama Alejandro
// La persona #3 se llama Cindy
// La persona #4 se llama Laura
Rangos unilaterais #
O operador de rango pechado conta cunha forma alternativa para os rangos que continúan o máis lonxe posible nunha dirección.
- Por exemplo, un rango que inclúe todos os elementos dun array desde o índice 2 ata o final do array.
- Nestes casos, podes omitir o valor nun dos lados do operador.
for nombre in nombres[2...] {
print(nombre)
}
// Cindy
// Laura
for nombre in nombres[...2] {
print(nombre)
}
// Ana
// Alejandro
// Cindy
for nombre in nombres[..<2] {
print(nombre)
}
// Ana
// Alejandro
while #
var x = 5
while x > 0 {
print("While: \(x)")
x -= 1
}
repeat-while #
x = 5
repeat {
print("Repeat - While: \(x)")
x -= 1
} while x > 0
Condicinais #
Swift ofrece dúas formas de engadir ramas condicionais ao código:
if
switch
if #
var temperatura = 15
if (temperatura <= 10){
print("Hace mucho frío, sobre \(temperatura) grados")
} else if (temperatura > 30){
print("Hace mucho calor, sobre \(temperatura) grados")
} else {
print("Está el día templado, sobre \(temperatura) grados")
}
Para poñer múltiples condicións no if
empregamos parénteses ou a ,
. Así, no seguinte exemplo, os dous if
son equivalentes:
var temperatura = 7
if temperatura <= 10, temperatura > 5{
print("Hace frío, sobre \(temperatura) grados")
}
if (temperatura <= 10) && (temperatura > 5) {
print("Hace frío, sobre \(temperatura) grados")
}
switch #
var temperatura = 15
switch temperatura {
case -100..<10:
print("Hace mucho frío, sobre \(temperatura) grados")
case 10..<30:
print("Está el día templado, sobre \(temperatura) grados")
case 30...40:
print("Hace mucho calor, sobre \(temperatura) grados")
default:
print("Temperatura de \(temperatura) grados")
}
Con tuplas. No seguinte exemplo imaxinamos un cadrado entre (-2,2) e (2,-2), tal como vemos na imaxe:
//Imaginamos un cuadrado entre (-2,2) y (2,-2)
var coordenada = (1, 1)
switch coordenada {
case (0, 0):
print("\(coordenada) es en el origen")
case (_, 0):
print("\(coordenada) es en el eje x")
case (0, _):
print("\(coordenada) es en el eje y")
case (-2...2, -2...2):
print("\(coordenada) está dentro del cuadrado")
default:
print("\(coordenada) está fuera del cuadrado")
}
Máis info #
Na páxina https://www.swift.org/documentation/ atoparedes outros xeitos de emprego da sentencia switch
Transferencia de fluxo #
Na páxina https://www.swift.org/documentation/ atoparedes formas de controlar o fluxo mediante as instrucións:
continue
break
fallthrough
return
throw
Neste módulo non vamos a ver estas sentencias.