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"?

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
}

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

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.


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.