caso rapido che cade


146

Swift ha fallito nell'affermazione? ad es. se faccio quanto segue

var testVar = "hello"
var result = 0

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

è possibile avere lo stesso codice eseguito per il caso "uno" e il caso "due"?

Risposte:


367

Sì. Puoi farlo come segue:

var testVal = "hello"
var result = 0

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

In alternativa, puoi utilizzare la fallthroughparola chiave:

var testVal = "hello"
var result = 0

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

29
+1 per non solo menzionare fallthrough, ma suggerire di usare il caso multiplo
Thilo

3
Questo è un ottimo compromesso tra il pericolo di caduta di C e la mancanza di caduta, ad esempio in C #
Alexander - Reinstate Monica,

Qualcuno sa come passare da un caso al default? case "two", default: non compilerà.
Zack Morris,

2
Non importa. Mi sono reso conto che commentare il caso lo rende parte del set di casi predefinito, quindi: / * case "two", * / default: ha l'effetto che sto cercando.
Zack Morris,

1
@AlexanderMomchliov C # ha fallito esplicitamente
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")
}

Conosci un modo per passare al caso predefinito?
MarcJames,

5
sono d'accordo con il "secondo caso". Per me questo comportamento fa schifo. Perché Swift esegue il caso successivo anche se non è vero? Questo rende la dichiarazione switch totalmente inutile ...
Andreas Utzinger,

7
case "one", "two":
    result = 1

Non ci sono dichiarazioni di rottura, ma i casi sono molto più flessibili.

Addendum: come sottolinea Analog File, breakin Swift ci sono effettivamente delle dichiarazioni. Sono ancora disponibili per l'uso nei loop, anche se non necessari nelle switchistruzioni, a meno che non sia necessario riempire un caso altrimenti vuoto, poiché i casi vuoti non sono consentiti. Ad esempio: default: break.


6

Ecco un esempio per te facile da capire:

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

Conclusione: utilizzare fallthroughper eseguire il caso successivo (solo uno) quando quello precedente che ha fallthroughè corrispondente o meno.


2

La parola chiave fallthroughalla fine di un caso provoca il comportamento fall-through che stai cercando e più valori possono essere controllati in un singolo caso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.