0Pricing
Swift Academy · レッスン

switchとforでのoptionalパターン

case letパターンでoptionalにマッチさせます。

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

switch でオプショナルを扱う

オプショナルに対して直接 switch できます。.some(value) と .none の case は、それぞれ値が存在する場合と nil に一致します。

let value: Int? = 7
switch value {
case .some(let n):
    print("Got \(n)")
case .none:
    print("Nothing")
}

? パターンの省略形

case let x? は .some(x) の省略形です。末尾の ? は「x にアンラップする」という意味です。

let value: String? = "Swift"
switch value {
case let text?:
    print(text.uppercased())
case nil:
    print("none")
}

nil に直接一致させる

.none の代わりにリテラル nil を使って nil の case に一致させることもできます。こちらのほうが自然に読めます。

let value: Int? = nil
switch value {
case let n?:
    print(n)
case nil:
    print("no value")
}

特定の値に一致させる

アンラップした特定の値と、一般的なアンラップパターンを組み合わせられます。

let status: Int? = 404
switch status {
case 200?:
    print("OK")
case 404?:
    print("Not Found")
case let code?:
    print("Other: \(code)")
case nil:
    print("No status")
}

ループでの for case let

オプショナルを反復処理する場合、for case let x? in array と書くと、nil の要素を自動的にスキップし、残りの要素をアンラップできます。

let items: [Int?] = [1, nil, 3, nil, 5]
for case let n? in items {
    print(n)
}

for case によるフィルタリングの仕組み

case let n? パターンは nil でない要素にのみ一致するため、ループ本体は値が存在する場合だけ実行されます。

let names: [String?] = ["Ann", nil, "Bo"]
for case let name? in names {
    print(name.count)
}

if let で同等の処理を行う

通常のループ内で if let を使って同じ処理を実現することもできますが、for case let x? のほうが簡潔です。

let items: [Int?] = [2, nil, 4]
for item in items {
    if let item {
        print(item)
    }
}

列挙型のオプショナルに一致させる

オプショナルパターンは、オプショナルの中の特定の値に一致させる場合など、他のパターンと組み合わせられます。

let codes: [Int?] = [1, 2, nil, 3]
for case let c? in codes where c % 2 == 1 {
    print("odd: \(c)")
}

for case と where

for case ループでアンラップした後、where 句を追加してさらにフィルタリングできます。

let scores: [Int?] = [40, nil, 80, 95]
for case let s? in scores where s >= 80 {
    print("high: \(s)")
}

where を使った switch

オプショナルに対する switch の内部では、アンラップしたバインディングを where 句でさらに絞り込めます。

let value: Int? = 12
switch value {
case let n? where n > 10:
    print("big: \(n)")
case let n?:
    print("small: \(n)")
case nil:
    print("none")
}

これらのパターンを使う理由

オプショナルパターンを使うと、値が存在する場合と存在しない場合を、1つの網羅的な構造で処理できます。あちこちに nil チェックを書く必要も減ります。

let result: String? = nil
switch result {
case let r?:
    print("Value: \(r)")
case nil:
    print("Empty result")
}

クイックチェック

オプショナルパターンをテストします。

まとめ: switch と for でのオプショナルパターン

switch では case let x?(.some の省略形)と case nil を使い、for case let x? では nil でない要素をアンラップしながら反復処理します。必要に応じて where で条件を追加できます。

let xs: [Int?] = [10, nil, 20]
for case let x? in xs { print(x) }

よくある質問

「switchとforでのoptionalパターン」レッスンは無料ですか?

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

「switchとforでのoptionalパターン」で何を学びますか?

case letパターンでoptionalにマッチさせます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「switchとforでのoptionalパターン」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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