schneller Fall fällt durch

146

Ist Swift durch Aussage gefallen? zB wenn ich folgendes mache

var testVar = "hello"
var result = 0

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

Ist es möglich, denselben Code für den Fall "eins" und den Fall "zwei" ausführen zu lassen?

Bilal Syed Hussain
quelle

Antworten:

367

Ja. Sie können dies wie folgt tun:

var testVal = "hello"
var result = 0

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

Alternativ können Sie das fallthroughSchlüsselwort verwenden:

var testVal = "hello"
var result = 0

switch testVal {
case "one":
    fallthrough
case "two":
    result = 1
default:
    result = 3
}
Cezary Wojcik
quelle
29
+1 für nicht nur erwähnen fallthrough, sondern vorschlagen, Multi-Case zu verwenden
Thilo
3
Dies ist ein so guter Kompromiss zwischen der Gefahr des Durchfalls von C und dem Mangel an Durchfall in beispielsweise C #
Alexander - Reinstate Monica
Weiß jemand, wie man von einem Fall zum Standard durchfällt? Fall "zwei", Standard: wird nicht kompiliert.
Zack Morris
2
Keine Ursache. Ich habe festgestellt, dass das Auskommentieren des Falls Teil der festgelegten Standardfälle ist. / * Fall "zwei", * / Standard: hat den gewünschten Effekt.
Zack Morris
1
@ AlexanderMomchliov C # hat explizit durchgefallen
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
quelle
Kennen Sie einen Weg, um zum Standardfall durchzukommen?
MarcJames
5
Ich stimme "Fall zwei" zu. Für mich ist dieses Verhalten scheiße. Warum führt Swift den nächsten Fall aus, obwohl er nicht wahr ist? Dies macht die switch-Anweisung völlig nutzlos ...
Andreas Utzinger
7
case "one", "two":
    result = 1

Es gibt keine break-Anweisungen, aber Fälle sind viel flexibler.

Nachtrag: Wie Analog File hervorhebt, gibt es breakin Swift tatsächlich Aussagen. Sie können weiterhin in Schleifen verwendet werden, sind jedoch in switchAnweisungen nicht erforderlich, es sei denn, Sie müssen einen ansonsten leeren Fall ausfüllen, da leere Fälle nicht zulässig sind. Zum Beispiel : default: break.

nhgrif
quelle
6

Hier ist ein Beispiel für Sie leicht zu verstehen:

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

Schlussfolgerung: Verwenden Sie fallthroughdiese Option, um den nächsten Fall (nur einen) auszuführen, wenn der vorherige fallthroughübereinstimmt oder nicht.

Khuong
quelle
2

Das Schlüsselwort fallthrougham Ende eines Falls verursacht das gewünschte Durchfallverhalten, und mehrere Werte können in einem Fall überprüft werden.

Russell Borogove
quelle