オプショナル型の使い方について超簡単に復習しよう!その2

この記事は2016年5月12日に書かれたものです。内容が古い可能性がありますのでご注意ください。


オプショナル型の使い方について超簡単に復習しよう!その1
ではオプショナル型とはどういったものかを説明しました。
簡単に言うと、オプショナル型は「値が空(nil)になっていてもエラーにならない型」でしたね。
今回はこのオプショナル型の宣言方法や使い方を見ていきましょう。

STEP2.オプショナル型を定義してみよう!


オプショナル型の宣言には「?」や「!」を使用します。「?」を使ったオプショナル型で試してみましょう。

var num:Int? = 100
num = nil                   //エラーにならない
num = "こんにちは"            //Int型のオプショナル型なのでもちろんエラーになる

このように型宣言の後ろに「?」、「!」を指定して定義します。
すると通常のInt型ではなく「オプショナル型のInt型」として定義されます。
2行目の内容確認してみるとnumにnilを代入していますね。通常のInt型でしたらnilを代入することは
できませんでしたが、今はオプショナル型として定義しているのでエラーにはなりません。
そしてもちろんのことですが、もともとはInt型として定義していますのでその他の型の値
(3行目ではString型)を代入しようとしてもエラーになりますね。

簡単にまとめると、

通常の型宣言→nilを代入できない普通の型
「?」や「!」を付けての型宣言→nilを代入できるオプショナル型

ということになります。全ての型はオプショナル型にすることができるのです!

STEP3.オプショナル型では代入されている値が普通の型とは異なる!


オプショナル型で定義した値をprint関数などで出力してみます。

var num:Int? = 100
print(num)

結果は「Optional(100)」のようになったかと思います。
このように、オプショナル型で定義された値は必ず「Optional()」という文字で包まれて生成されてしまいます。
「100」という値が格納されているわけではないんですね。
そのため、オプショナル型の値を扱うにはちょっと気をつけないといけません。

以下の例を見てみましょう。

var num1:Int? = 100
var num2:Int? = 200
print(num1 + num2)                    //エラーになる

両変数ともに通常のInt型でしたら100+200が実行されて300の値が出力されるのですが、
オプショナル型の場合はエラーとなってしまいます。
上にも書いた通りオプショナル型では、100を代入したとしても必ずOptional(100)という値が
代入される
ようになるんですね。

そのため3行目のように記述したとしても100+200が実行されているのではなく、
Optional(100)+Optional(200)が実行されていることになります。
そしてこれは数値ではないんです。足すことができないんです。なのでエラーになってしまうんです。

STEP4.オプショナル型から値を取り出してみよう!


オプショナル型の値はOptional()という文字に包まれて生成されるので、その中から値を
取り出すという一手順を加えてあげる必要があります。

値を取り出すには変数にアンラップする「!」という記号をつけます。ただそれだけです。
アンラップは読んで字のごとく「ラッピングされているものを外す」と言う意味です。Optional()を外すってことですね。
それだけなんですが、
型宣言の時に使用する「!」と今回アンラップに使用する「!」は同じ記号を使っていますが全くの別物であること
に注意してください。

では先ほどのnum1やnum2から、数値としての「100」や「200」を取り出してみましょう。

var num1:Int? = 100
var num2:Int? = 200
print(num1! + num2!)                   // エラーにならず300が出力される

num1!やnum2!とすることで、Optional()が取り外されてもともと代入した100と200として扱うことが
できます。
そのため3行目では100+200が実行されて300が出力されます。

今回はここまでにしましょう!

  • このエントリーをはてなブックマークに追加

PAGE TOP