Swift入門 Optional型について
こんにちはnasustです。
今回はswiftのOptional型について解説します。
さてはじめに、swiftの変数にはnilが代入できません。 これは不便に思えるかもしれませんが、便利なものです。
プログラムのnilチェックが減り完結になり、nilでないことが保証されるためバグを減らすことができます。
しかし現実にはnilを使用したい場合があります。
その場合はOptional型を使用します。
Optional型
Optional型はおおざっぱに説明すると、nilを許容した変数の箱です。
例を見れば分かりやすいと思います。
var val :Int? = 10 print(val)
Optional(10)
変数valをprintで表示すると"Optional(10)"と表示されます。 つまり"Optional(XX)"という箱に、Intの10が入っていることを示しています。
プログラミングの例で"Int?"があります。変数宣言の方の後ろに"?"を追加することで、 Optional型と宣言することが出来ます。
強制的アンラップ
Optional型の中身を使用したい場合は、変数の後ろに"!"を付与します。
var val :Int? = 10 print(val!)
10
"!"を付与することで中身の変数を使用することができます。
これをアンラップと呼びます。
さらに強制的にアンラップするので”強制的アンラップ”と呼ばれています。 これの他に"オプショナルバインディング"と”オプショナルチェイニング”という方法で アンラップすることができます。
オプショナルバインディング
強制的アンラップは、nilか関係なくアンラップするので、中身がnilである場合は、エラーで落ちます。 では中身を確認して、アンラップすることができます。
var val :Int? = 10 if let unwrapVal = val { print(unwrapVal) } else { print("nil") }
10
if let unwrapVal = val
この構文が、オプショナルバインディングです。
valの中身がnilでは無い場合、変数unwrapValに値が格納されます。
nilである場合は、elseを実行します。
オプショナルチェイニング
オプショナルチェイニングとは、オプショナル型のままメソッドを実行します。
変数名の後ろに"?"を付与してメソッドを実行します。すると結果がOptional型で 返ってきます。
var val :String? = "hoge" print(val?.uppercased())
Optional("HOGE")
var val :String? = nil print(val?.uppercased())
暗黙的アンラップ
var val :Int? = 10 print( 10 + val )
通常、上記のプログラムでですと、コンパイルエラーになり実行できません。 しかし"?"を"!"にすることで、暗黙的アンラップになります。
暗黙的アンラップは、Optional型にも関わらず、そうでないように振るいます。
var val :Int! = 10 print( 10 + val )
20
このように、通常の足し算ができます。
最後に
実際のアプリの開発では、Optional型が多用されます。swiftではOptional型をしっかりと覚えることがキモです。