【Swift】switch文の使い方(Swift 2.1、XCode 7.2)

2020年6月16日

switch文とは、1つの式の結果をもとに条件分岐させるときに使う制御文である。switch文で記述できるものは、すべてif文に書き換えることができる。

 

以下のコードはswitch文を使った例

 

上記のコードをif文に書き換えると以下のコードになる。

 

switch文をif文で書き換えることができるならif文だけ覚えておけばいいように思えるが、switch文が存在する利点がある。

それは、switch文では条件分岐の判定に使う式や変数が「switch」の横にしか出てこないのでコードがすっきりすることや、値の先頭が縦一直線に並ぶので縦にらみしやすいなどが挙げられる。

また、if文では先頭の条件式を削除した場合に後続の条件式をelse if からifに変えるなど、条件の追加、削除が他の条件式に影響を及ぼす場合があるが、swich文はそのようなことがないため追加、削除がしやすい。

switch文の利点

 

Swiftでは、caseの処理が終わったあとにbreakが記述されて無くてもswitchの処理が自動で終了するようになっている。

例えば、上記のコードがJava言語だった場合、print(“50から70の間")が実行されたあと、そのまま処理が止まらずにprint(“0から70の中には入っていない")が実行されてしまう。一方、swiftではprint(“50から70の間")が実行された時点でswitchの処理が終了する。

後続の処理をそのまま続けたい場合は以下のコードのようにfallthroughを記述する。

 

他の言語では、異なる値で同じ処理をする場合には以下のコードのようにcaseのみ列挙するような書き方ができたが、Swiftの場合はエラーになる。後続の処理に流す場合はfallthrough、何もせずに終了する場合はbreakを記述すること。

switchの条件式には整数以外の型や式を記述することができる。

 

caseの値にも柔軟な設定ができるようになっている。以下のコードは、caseの値にレンジ演算子を用いて範囲を指定した例。

 

switchの条件式にタプルを指定することができる。以下のコードのように、判定に使わないタプルの値をアンダースコアにすれば無視させることができる。

 

以下のコードのように、switchの式をcaseで変数または定数として受け取り、where句を使って条件式を記述できる。この仕様によってswitchの自由度がかなり向上したように感じる。