Swiftのif文

if文は条件式の真偽によって、処理を分岐する制御構文です。
今回の記事では、Swiftのif文についてまとめていきます。

if文

Swiftのif文は以下のように記述します。

if 条件式 {
    条件式が真の場合に実施する処理
}

Swiftでは条件式は必ずBool型の結果を返す必要があります。
条件式がtrueの場合、その後に続く{}ブロック内の処理を行い、falseの場合は処理を行わずにスキップします。

// 利用例
var num = 2

if num <= 3 { // 条件式"numが3以下かどうか"
    print('numは3以下です。")
 }

// 実行結果
// >>> numは3以下です。

条件式の部分はBool型である必要があるので、それ以外の型だとコンパイルエラーとなります。
プログラミング言語によっては文字列型や数値型を許容するものもありますが、Swiftでは挙動が直感的にわかりやすいようにBool型のみを許容する設計となっているのです。

else節

複数の条件で分岐判定をしたい場合、else節を繋いでいくことで実現できます。
else節は以下のように記述します。

if 条件式1 {
    条件式1が真だった場合に実施する処理
} else if 条件式2 {
    条件式2が真だった場合に実施する処理
} else if 条件式3 {
    条件式3が真だった場合に実施する処理
} else {
    上記の条件式が全て偽だった場合に実施する処理
}

「else if 条件式 {}」のように記述すると条件式を追加することができます。
また、「else if 条件式 {}」は何個でも連結可能です。
「else {}」のように記述すると条件式に当てはまらない場合に実施する処理を追加できます。
「else {}」はif文の中で最後に一回のみ記述することができます。
どちらの場合のelse節も必要な場合のみ記述します。

// 利用例
var score = 77
var judge = ""

if score >= 90 { // scoreが90以上の場合
    judge = "優"
} else if score >=70 { // scoreが70以上の場合
    judge = "合格"
} else { // 上記以外の場合
    judge = "不合格"
}

print("判定結果:" + judge)

// 実行結果
// >>> 判定結果:合格

複数の条件式を持つif文では、条件式は上から順に判定されていき判定が真の条件が出た時点で処理を実施し、その後の条件式の判定はスキップします。
そのため条件式を連結する際はその順番も気をつける必要があります。

// 利用例
var score = 95
var judge = ""

if score >= 70 { // scoreが70以上の場合
    judge = "合格"
} else if score >= 90 { // scoreが90以上の場合
    judge = "優"
} else { // 上記以外の場合
    judge = "不合格"
}

print("判定結果:" + judge)

// 実行結果
// >>> 判定結果:合格

上記の例では本来、scoreが95なので条件式が「scoreが90以上」の分岐の処理に入り「判定結果:優」と出力されるのが期待される挙動です。
しかし、条件式の順番が誤っているため「scoreが70以上」の判定が最初にされ真となり「judgeに”合格”代入する」処理が実行され、それ以降の処理はスキップされてしまっています。

if-let文

最後にif-let文について説明します。
if-let文はOptional<Wrapped>型の値を取り出し、値が存在する場合に処理を行う条件分岐文です。
Optional<Wrapped>型とはnilを許容する型です。詳しくは以下にまとめています。

キョウタコの技術日記

Swiftでは普通に変数・定数を定義するとnilを許容しない設計になっています。そして、nilを許容する場合はOptio…

if-let文は以下のように記述します。

if let 変数名 = Optional<Wrapped>型変数 {
    値が存在する場合に実施する処理
} else {
    値が存在しない場合に実施する処理
}

if-let文で宣言した変数は値が存在する場合に実施する処理内のスコープでのみ参照可能です。

// 利用例
var optionalNum: Int? = 4

if let num = optionalNum {
    print(String(num) + "の値が入っています。")
} else {
    print("値が入っていません。")
}

// 実行結果
// >>> 4の値が入っています。

if-let文を利用することでOptional<Wrapped>型の値が存在することが保証された状態で処理を記述することができ、実行時エラーを防ぐことができます。

まとめ

  • if文で条件分岐処理を記述することができる。
  • 複数の条件分岐を連結するときはelse if、どの条件にも当てはまらない場合はelseを利用する。
  • if let でOptional<Wrapped>型の値が存在する場合の条件分岐を記述できる。

条件分岐はプログラミングの基本的な知識の一つです。
Swiftでの記述方法もしっかりと覚えてコーディングしていきましょう。
ここまで読んでいただきありがとうございました。
それでは、また。