[Swift]オプショナル型とnil, “?”, “!”が分かるようになる

みなさんお疲れ様です。Kosukeです。

Swift文法の話で”オプショナル型”、”nil”、”?”、”!”というややこしい?用語が出てくることがありますが、今回はこちらの説明をしていきたいと思います。

結論が待ちきれない方は、④のまとめを先にご覧ください。

①データ型について

Swiftには他のプログラミング言語のように、String(文字列)、Int(整数)、Double(小数)といった、データの様々なカテゴリを表す「データ型」が存在します。変数を定義する際には、その中に格納するデータの型も定義されることとなります。

そして、オプショナル型もデータ型の1つです。

 

②格納するデータの型を選択できるオプショナル型

それでは、変数を定義する際のデータ型として「オプショナル型」を選択すると、どんなカテゴリのデータを格納することができるのでしょうか。下記の2種類に分けることができます。

・StringやInt、Doubleといった、通常のデータ

・nilという名の「空の状態」を作るデータ

つまり、「通常のデータを入れても良いけど、あえて空のデータを入れることもできる」というOptional(選択可能)なデータ型と言えます。

 

③オプショナル型の使用方法と危険性

・オプショナル型の使用方法

そして、変数をオプショナル型として宣言するのに必要なのが、”?”になります。

例えば、

var release_year : Int?

//データ型の指定に”?”をつけることで、空のデータを格納した変数を作成することができます

print(release_year)–>nil

//release_yearをprintすると、中身が空であることを示すnilが出力されます

*データ型の宣言後に、release_year = 1977とすることで値を入れることもできます。

*あるいは、var history : Int? = 40とすることで、初めからオプショナル型としてデータ型を宣言した上、値を格納することもできます。

・オプショナル型の危険性と対策

データが入っている状態と、空の状態を使い分けられるのは、一見すると便利です。しかし、変数の中身が空の状態で使用すると、アプリがクラッシュしてしまうという危険性があるのです。

そこでアプリのクラッシュを防止するために使用するのが、”!”になります。

let memorial_year = release_year! + history!

//実際に変数を使用する際に、変数の後ろに”!”をつけることで、「この変数の中身が空ではない」ことを明示的に示します。

 

④まとめ

まとめると、

・オプショナル型–>

「StringやIntなどの通常データ」と「nilという空のデータ」のどちらでも格納できるという「Optional(選択できる)」なデータ型のこと

・nil–>

オプショナル型に格納する「空の状態」を表すデータのこと。風船に空気が入るようなもの。

・”?”–>

オプショナル型を宣言するために、通常のデータ型の後ろに付ける記号のこと。

例えば、var release_year : Int?//release_yearという変数のデータ型をオプショナル型にしている

・”!”–>

オプショナル型の変数(空ではない通常のデータが格納されている)を使用する際に、「この変数の中身は空ではないですよ」ということを明示的に示すために付ける記号のこと。

例えば、let memorial_year = release_year! + history!//release_yearとhistoryというオプショナル型の変数を使用する際に、”!”を付けることで中身が空ではないことを示している。


綾瀬はるか「今日もがんばったね!お疲れ!!」

おすすめ