Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Swift辞典

  1. トップページ
  2. Swift辞典
  3. if let / guard let(Optional Binding)

if let / guard let(Optional Binding)

Swiftの『if let』と『guard let』はOptionalを安全にアンラップする構文です。nilでない場合だけ中の値を定数・変数として取り出し、安全に処理できます。

構文
// if let
if let 定数名 = Optional値 {
    // 定数名はここで使用できる(非Optional)
}

// if var(変更可能)
if var 変数名 = Optional値 {
    変数名 = 新しい値  // 変更可能
}

// 複数のOptionalを同時にアンラップ
if let a = optA, let b = optB, a > 0 {
    // aとbが両方nilでなく、aが0より大きい場合
}

// Swift 5.7以降:同名での短縮形
if let name {
    // name(Optional)をアンラップして同名で使う
}
構文一覧
構文概要
if let 定数 = Optional { }nilでない場合にアンラップした値を定数として使います。
if var 変数 = Optional { }nilでない場合にアンラップした値を変数として使います。
if let a = opt, let b = opt2 { }複数のOptionalを同時にアンラップします。
if let 定数 = Optional, 追加条件 { }アンラップとwhere相当の条件チェックを組み合わせます。
if let name { }同名の変数をアンラップする短縮形(Swift 5.7以降)。
guard let 定数 = Optional else { return }nilの場合に早期リターンし、以降で定数を使えます。
サンプルコード
// 基本的なif let
let input: String? = "42"
if let value = Int(input!) {
    print("変換成功: \(value)")
} else {
    print("変換失敗")
}

// 複数のOptionalを同時にアンラップ
let firstName: String? = "太郎"
let lastName: String? = "山田"

if let first = firstName, let last = lastName {
    print("フルネーム: \(last) \(first)")
}

// 条件も同時にチェック
let score: Int? = 85
if let s = score, s >= 60 {
    print("合格: \(s)点")
}

// Swift 5.7以降の短縮形
let name: String? = "花子"
if let name {
    print("こんにちは、\(name)さん")  // nameをそのまま使う
}

// guard letでの使用
func printLength(of str: String?) {
    guard let str = str else {
        print("文字列がありません")
        return
    }
    print("文字数: \(str.count)")
}

printLength(of: "Hello")
printLength(of: nil)
概要

Optional Binding(『if let』・『guard let』)はSwiftでOptionalを扱う最も基本的かつ安全な方法です。アンラップした定数・変数はそのスコープ内で非Optionalとして扱われます。

複数のOptionalを同時にアンラップする場合、一つでもnilがあるとelse節(またはguardのelse節)が実行されます。アンラップした定数は該当のif/guardブロック内でのみ有効です(guard letはスコープ全体で有効)。

nilのときにデフォルト値を返す演算子については?? (Nil合体演算子)を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。