本文へスキップ
BecomeCoder

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

?? とオプショナルチェーン

ブラウザで完結

導入

「値が無ければ既定値を使う」「値があるときだけ次の処理をする」――もっと手短にOptionalを扱う道具が ???. です。

説明

??nil合体演算子。「左が nil なら右の既定値を使う」という意味です。

let typed: String? = nil
let display = typed ?? "ゲスト"
print(display)               // ゲスト

let score: Int? = 90
print("点数: \(score ?? 0)")  // 90

?.オプショナルチェーン。Optionalが nil でなければそのメンバにアクセスし、nil なら全体が nil になります(途中で安全に打ち切る)。

let word: String? = "Swift"
let length = word?.count      // 値があるので 5(これも Optional)
print(length ?? 0)            // 5

let empty: String? = nil
print(empty?.count ?? 0)      // 0(nil なので count には触れない)

?? は既定値を用意するのに、?. は「あるときだけたどる」のに使います。この2つで、if let を書くまでもない場面をスッキリ書けます。

やってみよう

typed に文字を入れると ?? の結果が変わります。wordnil にして word?.count がどうなるかも確かめましょう。

演習

let name: String? = nil を作り、?? を使って「名無しさん」と表示してください。

ヒント1を見る

let display = name ?? "名無しさん"

ヒント2を見る

print(display)

実際に動かしてみよう

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

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

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