English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、switch制御文を使用してプログラムの実行フローを制御する方法を学びます。
switch文も、例えば、さまざまなSwift制御文の1つです。if-else、guardなど、異なる条件に応じて異なるアクションを実行します。
switch文の利点は、値をいくつかの可能性のある一致パターンと比較できることです。したがって、長いif..else..ifのリッジ図を置き換え、複雑なパターンを一致させることができます。
switch文の構文は:
switch 変数/表現 { case value1: // 文 case value2: // 文 default: // 文 }
switch表現は一度だけ計算されます。
それは表現を受け入れ、順序に従って(上->以下)各case値と比較されます。
一致する項目がある場合、case内の文を実行し、最初に一致するswitchcaseが完了すると、switch文全体の実行が終了します。
一致するcaseがなければ、次のcase文に落ちます。
もしすべてのcaseに一致しない場合、defaultキーワードで指定されたコードを実行します。
注意:各caseの主体には少なくとも1つの実行可能な文が必要です。
let dayOfWeek = 4 switch dayOfWeek { case 1: print("日曜日") case 2: print("月曜日") case 3: print("火曜日") case 4: print("水曜日") case 5: print("Thursday") case 6: print("Friday") case 7: print("Saturday") default: print("Invalid day") }
上記のプログラムを実行すると、出力は以下のようになります:
Wednesday
上記のプログラムでは、switch文がdayOfWeek値を以下と比較して case 1一致して始まる。dayOfWeekvalueが最初のケースの値と一致しないため、次のケースに降りていきますまで繰り返します。
由于case 4switch表現と一致すると、case内のprint("水曜日")文が実行され、switchcaseが終了します。一致するcaseがなければ、以下を実行します。default内部的な文。
もしcase文でfallthroughキーワードを使用すると、case値がswitch表現に一致しない場合でも、制御は次のcaseに続行します。
let dayOfWeek = 4 switch dayOfWeek { case 1 : print("日曜日") case 2: print("月曜日") case 3: print("火曜日") case 4: print("水曜日") fallthrough case 5: print("Thursday") case 6: print("Friday") case 7: print("Saturday") default: print("Invalid day") }
上記のプログラムを実行すると、出力は以下のようになります:
Wednesday Thursday
上記のプログラムでは、case 4 文 print("Wednesday") を実行し、fallthroughキーワードがcaseを続行します。 5。case 5の文 print("Thursday") は実行され、casとswitch表現が一致しない場合でも実行されます。したがって、コントロールタブで Thursday が見られます。
let programmingLanguage = (name: "Go", version: 10) switch programmingLanguage { case (let name,let version) where (version < 0 && name.count < 0) : print("入力が無効です") case ("Swift", let version) where version == 4: print("最新バージョンのSwiftを見つけました") case ("Swift" , ..<4 ): print("古いバージョンのswiftを見つけました") case ("Swift" ,4... : print("Swiftバージョンが大きいです")4まだリリースされていません) case ("Taylor Swift",30) : print("我的天啊。 这是泰勒·斯威夫特") case (let name, let version): print(""" プログラミング言語:\(name) バージョン: \(version) 状態: Not found "" }
上記のプログラムを実行すると、出力は以下のようになります:
プログラミング言語:Go バージョン: 10 状態: Not found
上記のプログラムでは、タプル型の表現 programmingLanguage を以下の異なる状況とマッチングします:
case (let name, let version) where (version < 0 && name.count < 0)
この例では、switch表現の値を一時的な定数や変数にバインドし、letキーワードを使用して大文字と小文字の両方で使用できるようにします。これは値バインディングと呼ばれます。
また、where 子句を使用してこれらの値に条件を適用することもできます。複数の条件を結びつけるには、&& 演算子を使用して、上記の例のようにそれらを接続できます。
where 子句で定義された条件に case が一致しない場合、これらの case ブロック内の文は実行されず、次の switch case との比較を通じて実行されません。
case ("Swift" , ..<4 )
この場合、タプルの最初の要素が文字リテラル「Swift」にマッチし、二番目の要素が単方向の範囲に含まれているかどうかを確認します..<4。
case ("Swift" ,4...)
この場合、タプルの最初の要素が文字リテラル「Swift」にマッチし、二番目の要素が単方向の範囲に含まれているかどうかを確認します。4…。
case (let name, let version)
この場合、タプルの各値を一時的な定数または変数にバインドします。