【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)を許容できるので、さまざまなメリットがあります。

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

現役フリーランスエンジニアによる無料体験レッスン実施中!

もし、あなたが、

  • 経験、年齢、学歴に不安がある
  • 挫折しない学習方法が知りたい
  • アプリ開発で困っている
  • エンジニアの”生”の声が聞きたい!
  • 仕事獲得の仕方がわからない
  • エンジニアに転職したいが何をすればいいかわからない

など、プログラミング学習やキャリアのことでお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_mtm3

LINEで送る
Pocket

書いた人

ヤマシタ

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

おすすめコンテンツ

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

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