caso rápido cayendo

146

¿Swift tiene declaración fallida? por ejemplo, si hago lo siguiente

var testVar = "hello"
var result = 0

switch(testVal)
{
case "one":
    result = 1
case "two":
    result = 1
default:
    result = 3
}

¿Es posible tener el mismo código ejecutado para el caso "uno" y el caso "dos"?

Bilal Syed Hussain
fuente

Respuestas:

367

Si. Puede hacerlo de la siguiente manera:

var testVal = "hello"
var result = 0

switch testVal {
case "one", "two":
    result = 1
default:
    result = 3
}

Alternativamente, puede usar la fallthroughpalabra clave:

var testVal = "hello"
var result = 0

switch testVal {
case "one":
    fallthrough
case "two":
    result = 1
default:
    result = 3
}
Cezary Wojcik
fuente
29
+1 por no solo mencionar fallthrough, sino sugerir el uso de múltiples casos
Thilo
3
Este es un compromiso tan bueno entre el peligro de la caída de C y la falta de caída, por ejemplo, C #
Alexander - Restablecer Mónica
¿Alguien sabe cómo pasar de un caso al incumplimiento? caso "dos", predeterminado: no se compilará.
Zack Morris
2
No importa. Me di cuenta de que comentar el caso lo hace parte del conjunto de casos predeterminado, por lo que: / * case "two", * / default: tiene el efecto que estoy buscando.
Zack Morris
1
@AlexanderMomchliov C # ha caído explícitamente
Ian Newson
8
var testVar = "hello"

switch(testVar) {

case "hello":

    println("hello match number 1")

    fallthrough

case "two":

    println("two in not hello however the above fallthrough automatically always picks the     case following whether there is a match or not! To me this is wrong")

default:

    println("Default")
}
Glenn Tisman
fuente
¿Conoces una forma de caer en el caso predeterminado?
MarcJames
55
Estoy de acuerdo con el "caso dos". Para mí, este comportamiento apesta. ¿Por qué Swift ejecuta el siguiente caso aunque no sea cierto? Esto hace que la declaración de cambio sea totalmente inútil ...
Andreas Utzinger
7
case "one", "two":
    result = 1

No hay declaraciones de ruptura, pero los casos son mucho más flexibles.

Anexo: Como señala Analog File, en realidad hay breakdeclaraciones en Swift. Todavía están disponibles para su uso en bucles, aunque innecesarios en las switchdeclaraciones, a menos que necesite llenar un caso vacío, ya que los casos vacíos no están permitidos. Por ejemplo: default: break.

nhgrif
fuente
6

Aquí hay un ejemplo fácil de entender:

let value = 0

switch value
{
case 0:
    print(0) // print 0
    fallthrough
case 1:
    print(1) // print 1
case 2:
    print(2) // Doesn't print
default:
    print("default")
}

Conclusión: se utiliza fallthroughpara ejecutar el siguiente caso (solo uno) cuando el anterior que tiene fallthroughcoincidencia o no.

Khuong
fuente
2

La palabra clave fallthroughal final de un caso provoca el comportamiento de caída que está buscando, y se pueden verificar múltiples valores en un solo caso.

Russell Borogove
fuente