本文へスキップ
BecomeCoder

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

nil と Optional

ブラウザで完結

導入

他の言語で「値が無い=null」がバグの温床になりがちなのに対し、Swiftは「無いかもしれない値」を型のレベルで区別します。それが Optional です。

説明

型のうしろに ? を付けると、「その値、または nil(値なし)」を表す Optional型 になります。

var nickname: String? = nil    // いまは値なし
print(nickname)                 // nil

nickname = "たろちゃん"          // あとから値を入れる
print(nickname)                 // Optional("たろちゃん")

String? は「文字列があるか、無い(nil)か」という型です。ふつうの String には nil を入れられません。この区別のおかげで、Swiftは「値が無いかもしれない箇所」をコンパイル時に教えてくれます。

ただしOptionalは「箱に包まれた」状態なので、そのままでは中身を使えません。中身を取り出すことを アンラップ(unwrap) と呼びます。次のレッスンで安全な取り出し方を学びます。

graph LR
  A["String?<br/>(Optional)"] -->|値がある| B["中身: たろちゃん"]
  A -->|値がない| C["nil"]

やってみよう

nickname に文字を入れたり nil に戻したりして、print の結果を見比べてみましょう。値があるときは Optional(...) と表示されるのが確認できます。

演習

var email: String? = nil を作り、そのまま print(email) して、nil と表示されることを確かめてください。

ヒント1を見る

var email: String? = nil と書きます。

ヒント2を見る

print(email)

実際に動かしてみよう

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

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

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