La instrucción switch compara un valor contra una lista de valores y ejecuta el bloque de código del valor que coincida. La lista debe ser exhaustiva, lo que significa que debe haber un case por todo valor posible. Si hace falta algún valor, entonces se debe poner default.
let age = Int.random(in: 0..<21)
let message: String
switch age {
case 13:
message = "Aquí las tengo..."
case 15, 16:
message = "Ya estás viejo"
case 17...19:
message = "Estás en el rango"
case 20:
message = "mayor de edad"
default:
message = "Otro"
}
print(age, message)
En los casos se pueden validar valores específicos (e.g. 13), o varios valores separados por comas (e.g. 15, 16) o un rango de valores 17...19.
Comparar tuplas
let input = (10, 30)
let message: String
switch input {
case (10, 10):
message = "A"
case (20, 30):
message = "B"
case (10, 30):
message = "C"
default:
message = "D"
}
print(message) // C
Omitir valores de una tupla
En el caso de que no importa uno de los valores de la tupla, se puede omitir con un guion bajo:
let input = (10, 30)
let message: String
switch input {
case (10, 10):
message = "A"
case (_, 30):
message = "B"
case (10, 30):
message = "C"
default:
message = "D"
}
print(message) // B
Capturar un valor para usar dentro del bloque
Si el flujo entra por el segundo bloque, se puede utilizar el primer valor de la tupla por medio de la constante x.
let input = (10, 30)
let message: String
switch input {
case (10, 10):
message = "A"
case (let x, 30):
message = "B - \(x)"
case (10, 30):
message = "C"
default:
message = "D"
}
print(message) // B - 10
Validaciones adicionales con where
Cada case del switch puede tener un where para validar condiciones adicionales. Por ejemplo:
let input = 10
let message: String
switch input {
case let x where x > 15:
message = "A - \(x)"
case let x where x > 5:
message = "B - \(x)"
default:
message = "C"
}
print(message) // B - 10
Switch generador de resultado
Como la expresión if/else, switch puede ser usado para asignar un valor a una variable con base en una condición. Por ejemplo:
let input = 10
let message = switch input {
case let x where x > 15:
"A - \(x)"
case let x where x > 10:
"B - \(x)"
case let x where x > 5:
"C - \(x)"
default:
"D"
}
print(message)
Top comments (0)