【Swift】optional型まとめ

Optional型とは?

Appleの「安全のための設計」の一つ。
変数の中身やメソッドの返り値が nil になる可能性をプログラムで明示し、プログラマがその扱いを間違えた時にコンパイラが警告やエラーを出す。

POINT
オプショナル型で変数を宣言すると、その変数にはnilを代入することができるようになる。

Oprional型と非Optional型の違い

オプショナル型

変数にnilの代入できる。

何も値を入れなくてもnilとして使うことができる。

データ型データ型の最後に「?」か「!」をつける。

非オプショナル型

nilを代入できない。

nil以外の値を代入するまで使うことができない。

アンラップとは

オプショナル型を計算で使用したり、通常の型を受け取る関数の引数に渡したりする場合、値が空でないことを明示するために、アンラップする必要がある。

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

Optionalは値を包み込むラップのイメージで、オプショナル型は値をOptionalというラップ1枚で包み込んでいる。

たとえ中身がない(=nil)状態でもラップは存在するため、とりあえずデータを扱うことができる。

値はラッピングされているため、値を取り出す処理が必要である。

この包み紙を取り除き、値を取り出すことをアンラップと言う。

アンラップするには、オプショナル型の変数名の後ろに「!」をつける。

注意
中身が空(nil)のオプショナル型の変数をアンラップすると実行時エラーが発生する。

「型!」で宣言することにより自動でアンラップする

Optional型の場合にメソッドを使ったり配列内の要素にアクセスしたいときはアンラップしてから使うことになり毎回アンラップ作業が必要になる。

オプショナル型の変数の宣言に「型名?」の代わりに「型名!」を指定すると、変数の使用時に「変数!」の「!」は不要で自動でアンラップしてくれる。

オプショナルバインディングで安全にアンラップ

「変数名!」のように強制的にアンラップしたり、「var 変数名: 型!」の形式で宣言して自動でアンラップしたりできるのは、確実に変数に値が入っている場合、つまりnilでない場合のみである。

変数にnilが入っているとエラーとなり、プログラムが落ちてしまう。

if文を使用して、変数がnilでないかどうかを判断して、処理を切り分けることを

オプショナルバインディング(Optional Binding)という。

if let 変数 = オプショナル型の変数 {
  //  nilでない場合の処理
} else {
  //  nilである場合の処理
}

オプショナルチェイニングで安全にアンラップしてメソッドを実行

オプショナル型の変数の後ろに「?」を記述してメソッドやプロパティにアクセスしする。

これを、オプショナルチェイニング(Optional Chaining)という。

オプショナル型の変数?.メソッド()
オプショナル型の変数?.プロパティ

こうすると、オプショナル型の変数に値が存在するかどうかを調べて、存在していればメソッドを実行したりプロパティを取得したりする。

一方、値がnilの場合には、メソッドやプロパティは実行されずにnilが戻される。

参考

参考 【Swift入門】オプショナル型を理解しよう新卒エンジニアの開発日記 参考 Swiftのオプショナル型の使いこなしThinkit

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です