Loading...

Swift入門 Optional型について

f:id:nasust:20170205105151j:plain


こんにちは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")


nilの場合は、メソッドを実行するとnilが返ります。

var val :String? = nil

print(val?.uppercased())

nil


暗黙的アンラップ

var val :Int? = 10

print( 10 + val )

通常、上記のプログラムでですと、コンパイルエラーになり実行できません。 しかし"?"を"!"にすることで、暗黙的アンラップになります。

暗黙的アンラップは、Optional型にも関わらず、そうでないように振るいます。

var val :Int! = 10

print( 10 + val )

20


このように、通常の足し算ができます。

最後に

実際のアプリの開発では、Optional型が多用されます。swiftではOptional型をしっかりと覚えることがキモです。


Swift 入門 目次に戻る