Swift 文法その4 - 分岐処理 -
一見難しそうに見えるプログラミングも、処理の仕方は3つしかありません。上から順番に処理する順次実行、条件によって処理を分ける分岐処理、同じ処理を繰り返し実行するループ処理です。ここでは Swift の分岐処理についてご紹介します。
if 、guard 、switch のいずれかを用いて書くことができます。
if 文
「もし...であれば処理を実行する」という分岐処理の最も基本的な書き方です。
if 条件式 {
...
}
if 条件式 {
...
} else {
...
}
if 条件式 {
...
} else if 条件式 {
...
} else {
...
}
また、if 文は nil チェックに使用したり、Optional Binding した上でさらに条件を続けて書くこともできます。
var a: String? = "Hello"
if let _ = a {
print("a は nil ではありません")
}
if let a = a, a.count >= 3 {
print("a は3文字以上です")
}
guard 文
「もし...以外であればここで処理を終了する」という、処理を止めるためのものです。guard は英語で「守る」という意味ですが、その言葉通り「見張り役」のようなもので、「指定の条件を満たしていなかったらこの先は通しません!」という感じです。
guard 条件式 else {
...
return
}
ブロックの最後で処理を抜ける return や break を必ず行います。
switch 文
条件が複数ある場合に if 文より簡単に書くことができます。
var a = 100
switch a {
case 1:
print("1")
// 複数指定
case 50, 75:
print("50または75")
// 範囲指定
case 76...99:
print("76〜99")
// 上記以外
default:
print("その他")
}
変数のクラス型を判定したり、キャスト後の変数を使用する場合は以下のように書きます。
var a = 100
// データ型の判定
switch a {
case is String:
print("String型です")
case is Int:
print("Int型です")
default:
print("その他")
}
// キャスト後の変数を使用する場合
switch a {
case let value as String:
print("\(value)はString型です")
case let value as Int:
print("\(value)はInt型です")
default:
print("その他")
}
ただ、if 文の if let a = a, a.count >= 3 { ... } のように細かい条件式が書けないので、そういった場合は if 文を使いましょう。
2つの変数を同時にチェックするとこともできます。
var a: String? = "a"
var b: String? = nil
switch (a, b) {
case let (a?, b?):
print("a: \(a), b: \(b)")
case (nil, nil):
print("a: nil, b: nil")
default:
print("a: \(a ?? "nil"), b: \(b ?? "nil")")
}
おさらい
私は条件が2つくらいだとif 文で書きますが、3つ以上だと見やすさの観点からなるべく switch 文で書くようにしています。
guard の使い方は最初よくわからないと思いますが、値の検証(バリデーション)でよく使われます。フォーム送信時に入力項目が未入力だったらここでエラーにする、とかです。
ちなみに、今回「〜であれば」「〜でなければ」という条件分岐の話でしたが、変数の代入にも分岐代入なるものがあります。三項演算子 と 論理演算子 というもので、実はよく使うのでここで紹介しておきます。
三項演算子
条件式 ? a : b の形で使用し、条件式 が true の場合は a、false の場合は b を返します。
let a: Int? = 100
let message = a == 100 ? "100です" : "100ではありません"
print(message) // "100です"
論理演算子
a ?? b の形で使用し、 a が nil でなければ a、nil の場合は b を返します。
let a: String?
let b = a ?? ""
print(b) // ""
次回はループ処理についてご紹介します。
この記事が気に入ったらサポートをしてみませんか?