Swiftにおけるオプショナル型やアンラップについて
Swift言語におけるオプショナル型とそのアンラップについて説明する。
Swift言語を扱うに当たって必ず使用するものの1つであるオプショナル型。
オプショナル型と非オプショナル型の違いがどういうものかを簡単に言うと、
nil(null)の入力を変数自体が許可するかどうかである。
・オプショナル型=nil(null)の入力を許可する型
・非オプショナル型=nil(null)の入力を許可しない(エラーとする)型
ここは単純なので特に説明することはないが、
変数宣言時にオプショナル型の変数は型のみで定義することが可能であり、
非オプショナル型の変数は型のみでの定義はできず、値をセットしなければいけない。
(非オプショナル型の変数にnilを入れるとコンパイル時にエラーとなる。)
このようにnilの許容をはっきりさせることで、
nil による不具合を未然に防ぐことができるのである。
(様々な言語でオプショナルは導入されてきている。Javaはjava8時点で導入済み)
ちなみにオプショナル型の変数を定義する方法は
var test: String?
このように変数の型の後に’?’をつける方法と
var test: String!
‘!’をつける方法がある。
この2つの違いは、変数の値を使用する際に自動でアンラップ(unwrap)してくれるかどうかである。
・’?’をつけた場合は自動でアンラップしない。
(値を使用する際はアンラップの処理をおこなう必要がある。)
・’!’をつけた場合は自動でアンラップする。
(ただし、値がnilだった場合アンラップできずにエラーとなりクラッシュの原因となる)
よって、基本的に’?’を用いたほうが安全であるため推奨する。
ちなみに、
‘?’を用いた際のアンラップ処理の方法もいくつかあるが、
おすすめなアンラップ方法としてはguard文を用いたアンラップ処理である。
例:
var test: String? guard let testUn = test else { print("----error----") } print("testの値: " + testUn)
上記の方法で安全にアンラップし、変数の値を使用することができる。
また、’?’のついたオプショナル変数を’!’で強制的にアンラップする方法
例:
var test: String? print(test!)
上記のような方法もあるが、
不具合混入を防ぐために、なるべく’!’は使わないべきであると私は思う。