【Swift】switch文

switch文とは、変数や定数の値によって処理を分岐したい場合に使う制御構文です。
基本的にはif文で同じ処理を実装する事ができますが使いわけとしては、
複雑な条件分岐であればif文の方が適していますが、単純な条件や分岐が多い場合はswitch文が適しています。

switchアイキャッチimg

前回は guard文 について書きました。

今回は switch文 について書いていこうと思います。

switch文とは

switch文 とは、変数や定数の値によって処理を分岐したい場合に使う制御構文です。
基本的には if文 で同じ処理を実装する事ができますが使いわけとしては、
複雑な条件分岐であれば if文 の方が適していますが、単純な条件や分岐が多い場合は switch文 が適しています。

switch文の書式

 switch 値または式{
 case 値1: 処理1
 case 値2: 処理2
 .
 .
 .
 default: デフォルトの処理
 }

switch キーワードを書いた後に値、または式を書きます。
{ } の中に case キーワードを書いて、値 1 だった場合は処理 1 、値 2 だった場合は処理 2 のように分岐を必要な分、箇条書きします。
値と処理は : で区切ります。
default には、どの case にも当てはまらない場合に実行される処理を書きます。

switch文を使った例

let hp = [50, 75, 100, 125, 150]
let result = Int.random(in: 0 ..< hp.count) //0~4
func strategy(HP: Int){
    switch HP{
    case 50:
        print("めいれいさせろ")
    case 75:
        print("いのちだいじに")
    case 100:
        print("いろいろやろうぜ")
    case 125:
        print("バッチリがんばれ")
    case 150:
        print("ガンガンいこうぜ")
    default:
        print("パルプンテ")
    }
}
strategy(HP: hp[result])

配列hp を定義して、Int型 の値( 要素 )を複数代入します。
定数result には 0 ~ 4 の整数がランダムに代入されるようにして、インデックス番号として使います。
この 定数resulthp[ result ] として、 配列hp の 0 ~ 4 番目の中からランダムで要素にアクセスします。
ランダムに選択された要素の値によって処理を分岐して、値と一致した case があれば、その case の処理を実行します。
値がどの case にも当てはまらない場合は、default の処理が実行されます。
関数strategy の引数に hp[ result ] を指定して実行すると、ランダムに選択された値によって switch文 で処理を分岐します。

switchコードimg

範囲演算子を使った switch文 の例

switch文case に範囲演算子を使うことで、値がその範囲に含まれているかどうか判定することができます。

let hp = [50, 75, 100, 125, 150]
let result = Int.random(in: 0 ..< hp.count) //0~4
print(result)
func strategy(HP: Int){
    switch HP{
    case 0...50: //0~50
        print("めいれいさせろ")
    case 51...75: //51~75
        print("いのちだいじに")
    case 76...100: //76~100
        print("いろいろやろうぜ")
    case 101...125: //101~125
        print("バッチリがんばれ")
    case 126...150: //126~150
        print("ガンガンいこうぜ")
    default: 
        print("パルプンテ")
    }
}
strategy(HP: hp[result])

case に範囲演算子を使って、値がどの case の範囲に当てはまるか判定して、当てはまった case の処理を実行します。

範囲演算子 についてはこちらの記事で紹介しています。

switchコードimg2

上の例では 関数strategy の引数を Int型 で指定していますが、FloatDouble型 を指定すると、FloatDouble型 の値を判定することもできます。

let hp:[Float] = [50.0, 75.0, 100.0, 125.0, 150.0]
let result = Int.random(in: 0 ..< hp.count) //0~4
print(result)
print(hp[result])

func strategy(HP: Float){
    switch HP{
    case 0.0...50.0: //0.0~50.0
        print("めいれいさせろ")
    case 51.0...75.0: //51.0~75.0
        print("いのちだいじに")
    case 76.0...100.0: //76.0~100.0
        print("いろいろやろうぜ")
    case 101.0...125.0: //101.0~125.0
        print("バッチリがんばれ")
    case 126.0...150.0: //126.0~150.0
        print("ガンガンいこうぜ")
    default:
        print("パルプンテ")
    }
}

strategy(HP: hp[result])
switchコードimg3

これと同じ処理は if文 でも書くことができますが、else if をいくつも重ねて書くことになると思います。 条件や分岐の数によっては読みづらいコードになることもあると思うので、こういった単純な条件で分岐が多い場合などは switch文 で書いた方が可読性は高いかもしれません。
以上 switch文 についてでした。

次回は class について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

投稿者: tomo

30代経験ゼロからプログラミングを始めて、趣味でiOSのアプリを作って遊んでる人。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です