szybka sprawa

146

Czy Swift upadł przez oświadczenie? np. jeśli wykonam następujące czynności

var testVar = "hello"
var result = 0

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

czy możliwe jest wykonanie tego samego kodu dla przypadku „jeden” i przypadku „dwa”?

Bilal Syed Hussain
źródło

Odpowiedzi:

367

Tak. Możesz to zrobić w następujący sposób:

var testVal = "hello"
var result = 0

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

Alternatywnie możesz użyć fallthroughsłowa kluczowego:

var testVal = "hello"
var result = 0

switch testVal {
case "one":
    fallthrough
case "two":
    result = 1
default:
    result = 3
}
Cezary Wójcik
źródło
29
+1 za nie tylko wzmiankę fallthrough, ale także sugestię użycia wielu przypadków
Thilo
3
To taki dobry kompromis między niebezpieczeństwem upadku C, a brakiem upadku na przykład w C #
Alexander - Reinstate Monica
Czy ktoś wie, jak przejść od sprawy do niewypłacalności? przypadek "dwa", domyślnie: nie będzie się kompilował.
Zack Morris
2
Nieważne. Zdałem sobie sprawę, że zakomentowanie przypadku sprawia, że ​​jest on częścią domyślnego zestawu przypadków, więc: / * case "two", * / default: ma efekt, którego szukam.
Zack Morris
1
@AlexanderMomchliov C # ma wyraźny upadek
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
źródło
Czy znasz sposób, aby przejść do sprawy domyślnej?
MarcJames
5
zgadzam się z „przypadkiem drugim”. Dla mnie takie zachowanie jest do bani. Dlaczego Swift wykonuje następny przypadek, nawet jeśli to nieprawda? To sprawia, że ​​oświadczenie o przełączniku jest całkowicie bezużyteczne ...
Andreas Utzinger,
7
case "one", "two":
    result = 1

Nie ma instrukcji przerwania, ale przypadki są znacznie bardziej elastyczne.

Dodatek: Jak wskazuje Analog File, breakw języku Swift są faktycznie stwierdzenia. Nadal są dostępne do użycia w pętlach, choć niepotrzebne w switchinstrukcjach, chyba że musisz wypełnić puste litery, ponieważ puste wielkości nie są dozwolone. Na przykład: default: break.

nhgrif
źródło
6

Oto przykład dla Ciebie łatwy do zrozumienia:

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

Wniosek: Użyj, fallthroughaby wykonać następny przypadek (tylko jeden), gdy poprzedni, który ma, fallthroughjest zgodny lub nie.

Khuong
źródło
2

Słowo kluczowe fallthroughna końcu sprawy powoduje zachowanie upadku, którego szukasz, a wiele wartości można sprawdzić w jednym przypadku.

Russell Borogove
źródło