cas rapide tombant à travers

146

Est-ce que Swift a fait une déclaration? par exemple si je fais ce qui suit

var testVar = "hello"
var result = 0

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

est-il possible d'avoir le même code exécuté pour le cas "un" et le cas "deux"?

Bilal Syed Hussain
la source

Réponses:

367

Oui. Vous pouvez le faire comme suit:

var testVal = "hello"
var result = 0

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

Vous pouvez également utiliser le fallthroughmot - clé:

var testVal = "hello"
var result = 0

switch testVal {
case "one":
    fallthrough
case "two":
    result = 1
default:
    result = 3
}
Cezary Wojcik
la source
29
+1 pour non seulement mentionner fallthrough, mais suggérer d'utiliser le multi-cas
Thilo
3
C'est un si bon compromis entre le danger de chute de C et l'absence de chute par exemple, C #
Alexander - Reinstate Monica
Quelqu'un sait-il comment passer d'un cas à un défaut? cas "deux", par défaut: ne compile pas.
Zack Morris
2
Ça ne fait rien. J'ai réalisé que commenter le cas en fait une partie de l'ensemble des cas par défaut, donc: / * case "two", * / default: a l'effet que je recherche.
Zack Morris
1
@AlexanderMomchliov C # a une chute explicite
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
la source
Connaissez-vous un moyen de passer au cas par défaut?
MarcJames
5
je suis d'accord avec le «cas deux». Pour moi, ce comportement est nul. Pourquoi Swift exécute-t-il le cas suivant même si ce n'est pas vrai? Cela rend la déclaration de commutation totalement inutile ...
Andreas Utzinger
7
case "one", "two":
    result = 1

Il n'y a pas de déclaration break, mais les cas sont beaucoup plus flexibles.

Addendum: Comme le souligne Analog File, il existe en fait des breakdéclarations dans Swift. Ils sont toujours disponibles pour une utilisation dans les boucles, bien qu'inutiles dans les switchinstructions, à moins que vous n'ayez besoin de remplir une case autrement vide, car les cases vides ne sont pas autorisées. Par exemple: default: break.

nhgrif
la source
6

Voici un exemple pour vous facile à comprendre:

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")
}

Conclusion: Utilisez fallthroughpour exécuter le cas suivant (un seul) lorsque le précédent qui a fallthroughcorrespond ou non.

Khuong
la source
2

Le mot-clé fallthroughà la fin d'un cas provoque le comportement de substitution que vous recherchez, et plusieurs valeurs peuvent être vérifiées dans un seul cas.

Russell Borogove
la source