本文へスキップ
BecomeCoder

Swift(iOSアプリ)コース · 第3章 Optional ― アプリの安全の要 · レッスン11

if let と guard let ― 安全な取り出し

ブラウザで完結

導入

Optionalの中身を使うには「値が入っているか確認してから取り出す」のが基本。その定番が if letguard let です。

説明

if let 名前 = Optional は、値が入っていればその中身を取り出して ブロックを実行し、nil なら実行しません。

let input: String? = "こんにちは"
if let message = input {
    print("受け取った: \(message)")   // ここでは message はふつうの String
} else {
    print("入力がありません")
}

関数の入り口で「値が無ければ早く抜ける」書き方には guard let が向いています。guard let ... else { 抜ける処理 } の形で、取り出した値はその後もずっと使える のが特徴です。

func greet(_ name: String?) {
    guard let name = name else {
        print("名前が不明です")
        return
    }
    print("ようこそ、\(name) さん")   // ここから先で name をそのまま使える
}
greet("花子")
greet(nil)

if let は「取り出せたブロックの中だけ」、guard let は「取り出せたら以降ずっと」使える、と覚えましょう。iOSアプリでは、この2つで値の有無を安全にさばきます。

やってみよう

inputnil にすると else 側が動きます。greet に名前を渡したり nil を渡したりして、出力の違いを確かめましょう。

演習

let name: String? = "山田"if let で取り出し、「山田さん」のように表示してください。

ヒント1を見る

if let n = name { print("\(n)さん") }

ヒント2を見る

n は取り出したあとのふつうの文字列です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Swift / SwiftUI — ブラウザ内で実行(学習用)

Swiftの教材サブセットを動かす学習用ランナーを読み込みます。ふつうのコードは print の出力を表示し、SwiftUI(struct: View)を書くと右にiPhone風のライブプレビューを描画します(本物のXcode/Swiftコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。