1. ホーム
  2. スイフト

フォールスルーの使用方法概要

2022-02-28 09:53:59
<パス

swiftのswitchでは、caseの後にfallthroughを使うのは、breakなしのOC caseを使うのと同じです!

フォールスルーを使用する際の注意点としては

1. フォールスルーを追加すると、条件を満たすかどうかにかかわらず、[直後の] case または default 文を直接実行します。

var age = 10
switch age {
case 0... .10:
    print("kids")
    fallthrough
case 11... .20: print("child") .20:
    print("big friends")
case let x:
    print("\(x)-year-old friend")
}


出力結果です。

Little friend
Big friends


2. フォールスルー文の追加後、[直後の] case 条件で定数や変数を定義することはできません。

var age = 10
switch age {
case 0... .10:
    print("kids")
    fallthrough // error here
case let x:
    print("\(x)-year-old friend")
}


プログラムがエラーを報告する。

'fallthrough' cannot transfer control to a case label that declares variables


理由推測。

最初のケースを実行("child"を出力)した後、次のケースが直接実行されることは最初のポイントから分かっており、次のケース条件では一時変数xを定義しています。このことから、前のケースから直接入ってくる変数xは存在しないので、case文の中でxを使うと明らかに間違っていることが分かります。swiftのような安全な言語では当然このようなことは許されないので、フォールスルーでは次のcase条件で定数/変数を定義できないようにしています - 直後のcaseを除き、他のcaseでは定数/変数を定義できます(最初のコード例と同じです)。

3. フォールスルー後の次の条件文に直接ジャンプし、この条件文以降の文は実行されない

var age = 10
switch age {
case 0... .10:
    print("kids")
    fallthrough
    print("I jumped oh") //this sentence is not executed
case 11.... .20:
    print("big friend")
case let x:
    print("\(x)-year-old friend")
}


出力結果です。

Little friend
Big friends