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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- if letと省略形のバインディング
- 早期終了のためのguard let
- 複数のoptionalのバインディング
- switchとforでのoptionalパターン