web-dev-qa-db-ja.com

swiftケースが失敗する

Swiftにはフォールスルーステートメントがありますか?たとえば、次のことを行う場合

var testVar = "hello"
var result = 0

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

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

144

はい。次のようにできます。

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
}
349
Cezary Wojcik
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")
}
8
Glenn Tisman
case "one", "two":
    result = 1

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

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

7
nhgrif

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

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つのみ)を実行します。

6
Khuong

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

2