【Swift入門】オプショナル(Optional)型の基本を徹底解説!

こんにちは!フリーエンジニアのヤマシタです。

Swiftにはオプショナル(Optional)型というnilを許容できる変数を使うことができます。

この記事では、

・オプショナルとは?
・オプショナルの基本的な使い方

というオプショナル型の基本的な解説から、

・オプショナルのアンラップ
・オプショナルのバインディング
・暗黙的なオプショナル型

などの応用的な使い方に関しても解説していきます。

今回はそんなオプショナル(Optional)の使い方についてわかりやすく解説します!

※この記事ではSwift4.0を使用しています。

オプショナル(Optional)とは

オプショナル型は、通常の変数と異なり空の値(値が無い)状態を保持することができる変数です。

Swiftでは空の状態をnilで表します。

オプショナルの宣言

オプショナル型を宣言するときは、変数の型の後ろに?(クエスチョン)をつけます。

オプショナルの宣言:

オプショナル型は変数の宣言と同時に自動でnilが代入されます。そのため、「text = nil」のように初期化する必要はありません。

逆に通常の変数(非オプショナル型)は変数にnilを代入すると「nil cannot be assigned to type」のエラーとなります。

オプショナルのメリット

オプショナル型はnilの代入を許容することは上述したとおりですが、どのようなメリットがあるのでしょうか?

Swiftでは基本的にnilの値を参照しようとすると他のプログラミング言語同様アプリケーションが落ちてしまいます。

しかし、そのような問題を解決するためにオプショナルを使うことでnilを許容することができるようになりました。

また、変数にnilを許容するか明示的にできることにより、変数のnilチェックを省くことができて、より安全なコードを記述することができます。

オプショナルの基本的な使い方

ここではオプショナルの基本的な使い方を見ていきましょう。

オプショナルは先述したとおりnilを代入できるため、オプショナルで宣言した変数がnilであっても参照できます。

実行結果:

printで出力すると、上記のようにnilが出力されることがわかりますね!

非オプショナル型の場合は、変数の値にnilを代入するとエラーが発生します。

また、オプショナルは配列はディクショナリも同様に宣言できます。


実行結果:

オプショナルのアンラップ

オプショナル型と非オプショナル型は同じように変数の操作をすることができません。

上記のプログラムを実行すると、IntとInt?は別の型となるため、オプショナル型にInt型の値を代入しようとすると、

「error: value of optional type ‘Int?’ not unwrapped; did you mean to use ‘!’ or ‘?’?」

エラーが発生します。

そのため、オプショナル型の変数の値がnilでないことを明示するためにアンラップする必要があります。

アンラップ(unwrap)とはラップ(包装)の反対語でオプショナル型で包まれた変数を解除するような意味合いで使われます。

アンラップするためにはオプショナル型の変数の後ろに「!」を付けます。


実行結果:

上記のように「!」でアンラップすれば安全に値を参照することができます。

オプショナルの変数の値がnilの場合はアンラップするとエラーとなりますので注意しましょう。

オプショナルのバインディング

オプショナル型はif文などの条件式で使用できます。

オプショナル型は値がnilのときはFALSE、それ以外はTRUEを返します。

以下のようにオプショナル型を用いて比較することをバインディング(Binding)と呼びます。

実行結果:

暗黙的なオプショナル型

最後にオプショナルのもう一つの宣言方法を紹介します。

オプショナル型は宣言時に型の後ろに「?」を付けるのは説明したとおりですが、暗黙的なオプショナル型を宣言するときには、型の後ろに「!」をつけます。

暗黙的なオプショナルの宣言:

オプショナルを暗黙的に宣言すると、使用時にアンラップする必要がありません。

そのため、初期値はnilでも使うときには値が格納されていることがわかっているときには暗黙的なオプショナル型を宣言したほうが安全です。

しかし、暗黙的なオプショナル型でも値がnilでアンラップが必要なときにそのまま使用するとエラーとなりますので注意しましょう。

まとめ

ここではSwiftのオプショナル(Optional)について、

・オプショナルとは?
・オプショナルの基本的な使い方
・オプショナルのアンラップ
・オプショナルのバインディング
・暗黙的なオプショナル型

などについて解説しました。

オプショナル型は値が空(nil)を許容できるので、さまざまなメリットがあります。

もしオプショナルについて忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説