🐈
【Swift】Switch文caseの作成方法をまとめました。使ってみましょう!
Switch文とは?
Switch文とは、if文のように式の値に応じて分岐処理を行うための文です。
switch文もif else構文のように小括弧を省略でき、別にbreakキーワードを作成しなくてもcase内部のコードを実行すると、switch構文から抜けます。 また、比較値が明確に限定的な値である場合を除き、ほとんどの場合、必ずデフォルトを作成しなければなりません。
もし、上から条件に合ったcaseを連続的にbreakせずに実行するには、fallthroughキーワードを使います。 caseに複数の比較値を「、」(comma)で区切って一度にチェックすることができます。
Swift文の条件には、整数値以外にも様々な値(整数、浮動小数タイプ、文字、文字列、テュフなど)が入ることができます。 ただし、必ず入力値と各caseに入る比較値のデータタイプが同じでなければなりません。
Switch文の必要性
if else文で様々な条件を処理するにはelse ifを繰り返し繰り返す必要がありますが、これは可読性を低下させます。
プログラミングでは可読性は重要な要素であるため、条件分岐が4つ以上の場合はswitch caseを使うことが望ましいです。
switch構文の基本形態
switch 値や式 {
case 値1:
//・・・処理・・・
case 値2 , 値3:
//・・・処理・・・
case 値4:
//・・・処理・・・
default:
//・・・処理・・・
}
様々な入力値、fallthroughキーワードを使用
fallthroughキーワードを明示すると、1つのcase文を経て、その次にcase文が条件に合わなくても続けて実行します。
var someEmoji: Character = "🤭"
switch someEmoji {
case "😀","😉","🤭":
print("\(someEmoji)は笑う絵文字です。")
fallthrough
case "😱":
print("\(someEmoji)は気分が良くない絵文字です。")
default:
print("\(someEmoji)は絵文字です。")
}
// 🤭は笑う絵文字です。
// 🤭は気分がいまいちな絵文字です。
case "😱" 以降にfallthroughキーワードを明示していないため、break処理されて構文を抜けます。
範囲演算子を用いたSwitch文
Swiftでは、値の範囲を簡単に表示できる範囲演算子が存在します。
範囲演算子
- 閉鎖範囲演算子A···B : A から B を含む A から B までの数
- 半閉塞範囲演算子A..<B : A から B 未満までの数
- A...: A 以上の数
- ...A:A以下の数
- ..<A:A未満の数
var intVal: Int = 5
switch intVal {
case 0: print("Value is zero")
case 1...10: print("Value is in 1~10")
case 11..<20:print("Valueは11以上20未満")
case Int.min..<0: print("Valueは負数")
default: print("Valueは20以上の正数")
}
intVal = 20
switch intVal {
case 0: print("Value is zero")
case 1···10: print("Value is in 1~10")
case 11..<20:print("Valueは11以上20未満")
case Int.min..<0: print("Valueは負数")
default: print("Valueは20以上の正数")
}
実行結果
Value is in 1~10
Valueは20以上の正数
###値バインディングを使ったswitch case文
var tupleValue: (name: String, age: Int) = ("hyung8", 20)
switch tupleValue {
case ("hyung8", 28):
print("名前と年齢両方合わせました!")
case ("hyung8", let age): //letを付けた値バインディング。
print("名前だけ合っていました。 入力した年齢は\(age)です。")
case (let name, 28): //letを付けた値バインディング。
print(" 年だけ合っていました。 入力した名前は\(name)です。")
default:
print("どちらでもありません。")
}
tupleValue = ("hyung8", 28)
switch tupleValue {
case ("hyung8", 28):
print("名前と年齢両方合わせました!")
case ("hyung8", let age):
print("名前だけ合っていました。 入力した年齢は\(age)です。")
case (let name, 28):
print(" 年だけ合っていました。 入力した名前は\(name)です。")
default:
print("どちらでもありません。")
}
実行結果
名前だけ合っていました。 入力した年齢は20です。
名前と年齢両方合わせました!
Discussion
サンプルコードがところどころ変数名が違っていたり、タイポがあるようです。
インデントも合った方が見やすいと思いました。
以下変更点です。
・範囲演算子が一部「・・・」になっていました。
コードレビュー ありがとうございます。
修正しました😀
早速対応していただきありがとうございます!
Swiftのswitchについて、記事のおかげで理解できました☺️