0Pricing
Swift Academy · レッスン

複数のoptionalのバインディング

1つの条件で複数のoptionalをアンラップします。

「複数のoptionalのバインディング」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

複数の値を一度にバインドする

カンマで区切ると、1つの if let で複数のオプショナルをアンラップできます。本文を実行するには、すべてが nil でない必要があります。

let a: Int? = 1
let b: Int? = 2
if let a, let b {
    print(a + b)
}

すべて成功するか、何も実行しないか

リスト内のオプショナルのいずれかが nil の場合、ブロック全体がスキップされます。すべて成功するか、何もアンラップされないかのどちらかです。

let first: String? = "Ada"
let last: String? = nil
if let first, let last {
    print("\(first) \(last)")
} else {
    print("Missing a name")
}

完全な形式

完全な形式では、明示的な代入を使用します。if let a = optA, let b = optB のように書きます。省略形では、重複する名前を省けます。

let optX: Int? = 10
let optY: Int? = 20
if let x = optX, let y = optY {
    print(x * y)
}

バインディングと条件を組み合わせる

Boolean 条件とバインディングは交互に配置できます。後の条件では、先にアンラップした値を使用できます。

let age: Int? = 25
if let age, age >= 18 {
    print("Adult: \(age)")
}

依存するアンラップ

各値は左から右へアンラップされるため、後のバインディングは先のバインディングに依存できます。

let dict = ["key": "42"]
if let text = dict["key"], let number = Int(text) {
    print(number + 8)
}

順序が重要

バインディングは順番に評価され、短絡評価されます。最初のバインディングが失敗した場合、後続のバインディングはまったく評価されません。

func parse(_ s: String?) -> Int? {
    print("parsing")
    return s.flatMap { Int($0) }
}
let a: Int? = nil
if let a, let b = parse("5") {
    print(a + b)
} else {
    print("skipped")
}

guard で複数の値を扱う

同じカンマ区切りの形式は guard let でも使え、続行する前に複数の値をアンラップできます。

func makeFullName(_ first: String?, _ last: String?) -> String {
    guard let first, let last else { return "Unknown" }
    return "\(first) \(last)"
}
print(makeFullName("Grace", "Hopper"))

変換を組み合わせる

複数の文字列入力を一度に解析する場合、複数バインディングが役立ちます。

let wInput = "4"
let hInput = "5"
if let w = Int(wInput), let h = Int(hInput) {
    print("Area: \(w * h)")
}

ネストした if let を避ける

複数バインディングを使わない場合は、if let ブロックをネストしてピラミッド構造を作ることになります。カンマ形式なら、これを平坦化できます。

let p: Int? = 2
let q: Int? = 3
if let p {
    if let q {
        print(p + q)
    }
}

平坦化したバージョン

前のネストした例と同じロジックを、1つの複数バインディングで平坦に記述したものです。

let p: Int? = 2
let q: Int? = 3
if let p, let q {
    print(p + q)
}

末尾に条件を付ける

最後に Boolean チェックを追加して、組み合わせた結果を検証できます。

let xs = "3"
let ys = "9"
if let x = Int(xs), let y = Int(ys), x < y {
    print("\(x) is less than \(y)")
}

クイックチェック

複数のオプショナルバインディングをテストします。

まとめ: 複数のオプショナルをバインドする

カンマを使うと、1つの if let または guard let で複数のオプショナルをアンラップできます。すべて成功する必要があり、左から右へ評価され、依存するバインディングにも対応します。また、Boolean 条件も組み合わせられます。

let a: Int? = 1
let b: Int? = 2
if let a, let b { print(a + b) }

よくある質問

「複数のoptionalのバインディング」レッスンは無料ですか?

はい。「複数のoptionalのバインディング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「複数のoptionalのバインディング」で何を学びますか?

1つの条件で複数のoptionalをアンラップします。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「複数のoptionalのバインディング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. if letと省略形のバインディング
  2. 早期終了のためのguard let
  3. 複数のoptionalのバインディング
  4. switchとforでのoptionalパターン
← Swift Academyに戻る