fallthrough cuando actua en una Instrucción switch lo que hace es transferir el control de nuestro programa de un case al siguiente elemento, que puede ser otro case o default.
Si una instrucción case contiene un fallthrough, entonces si ocurriera la correspondencia que se evalua, primero se ejecutaría el código de este case y después el código del case o default que se encuentra a continuación sin evaluarlo.
Veamos un ejemplo:
var puntuacion = 8
var calificacion = ""
switch puntuacion {
case 0..<5:
calificacion = "Suspenso"
case 5..<7:
calificacion = "Aprobado"
case 7..<8:
calificacion = "Notable"
case 8..<9:
calificacion = "Notable+"
fallthrough
case 9...10:
calificacion = "Sobresaliente"
default:
calificacion = "Esa puntuación ni puede ser calificada"
}
print(calificacion)
El valor puntuacion = 8 tiene su correspondencia en el case 8..<9, por lo que se ejecuta calificacion = "Notable+", pero como este case tiene un fallthrough al final, entonces se ejecuta el siguiente case sin que se evalue ni se cumpla su condición, por lo que calificacion = "Sobresaliente".
Modificamos el ejemplo para que se aprecie con más claridad que se ejecutan los códigos incluidos en case 8..<9 y case 9...10.
var puntuacion = 8
var calificacion = ""
switch puntuacion {
case 0..<5:
calificacion = "Suspenso"
case 5..<7:
calificacion += "Aprobado"
case 7..<8:
calificacion += "Notable"
case 8..<9:
calificacion += "Notable+"
fallthrough
case 9...10:
calificacion += "Sobresaliente"
default:
calificacion += "Esa puntuación ni puede ser calificada"
}
print(calificacion)
Se pueden encadenar tantos fallthrough como queramos
var puntuacion = 8
var calificacion = ""
switch puntuacion {
case 0..<5:
calificacion = "Suspenso"
case 5..<7:
calificacion += "Aprobado"
case 7..<8:
calificacion += "Notable"
case 8..<9:
calificacion += "Notable+"
fallthrough
case 9...10:
calificacion += "Sobresaliente"
fallthrough
default:
calificacion += "Esa puntuación ni puede ser calificada"
}
print(calificacion)