落下する迅速なケース


146

迅速な発言は失敗ですか?たとえば、私が次のことをした場合

var testVar = "hello"
var result = 0

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

ケース「1」と「2」で同じコードを実行することは可能ですか?

回答:


367

はい。次のようにして行うことができます。

var testVal = "hello"
var result = 0

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

または、次のfallthroughキーワードを使用できます。

var testVal = "hello"
var result = 0

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

29
+1に言及するだけでなくfallthrough、マルチケースの使用を提案
Thilo

3
この例の中に貫通Cの秋の危険性、そして秋の欠如との間のこのような良好な妥協である、C#
アレクサンダー-復活モニカ

誰かが事件からデフォルトに陥る方法を知っていますか?ケース「2」、デフォルト:コンパイルされません。
Zack Morris、

2
気にしないで。ケースをコメント化すると、デフォルトのケースセットの一部になることに気付きました。/*case "two"、* / default:探している効果があります。
Zack Morris

1
@AlexanderMomchliov C#には明確なフォールスルーがある
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")
}

デフォルトのケースに陥る方法を知っていますか?
MarcJames 2016年

5
「ケース2」に同意します。私にとって、この振る舞いはひどいです。真実ではないのに、なぜSwiftは次のケースを実行するのですか?これにより、switchステートメントはまったく役に立たなくなります...
Andreas Utzinger '22

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

breakステートメントはありませんが、ケースははるかに柔軟です。

補遺: Analog Fileが指摘するように、実際にはbreakSwiftにステートメントがあります。switch空のケースは許可されていないため、空のケースを埋める必要がない限り、ステートメントでは不要ですが、ループで引き続き使用できます。例:default: break


6

わかりやすい例を次に示します。

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

結論:fallthrough前のケースfallthroughが一致するかどうかに応じて、次のケース(1つのみ)を実行するために使用します。


2

fallthroughケースの最後のキーワードは、探しているフォールスルー動作を引き起こし、単一のケースで複数の値をチェックできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.