Swift

オプショナル型と非オプショナル型について メモ

More than 1 year has passed since last update.

swift初心者です。
間違っているところがあれば指摘していただけると嬉しいです。

オプショナル型

オプショナル型とは、変数にnilが入ることを許してくれる型です。変数を宣言するときに?、!をつけるとオプショナル型になります。なので、とりあえず変数だけ宣言したい時とかに使えます。

オプショナル型
var name: String?
var count: Int!

非オプショナル型

オプショナル型と違い、変数にnilが入るとエラーがでます。なので、変数を宣言する時に、初期値を設定してあげる必要があります。

非オプショナル型
var name: String = "Kenta"
var count: Int = 1

!と?について

オプショナル型は、非オプショナル型と足し算引き算などしたりするとエラーが起きてしまいます。

エラーがでる例
var count1: Int? = 1 //オプショナル型
var count2: Int = 2 //非オプショナル型
println(count1 + count2) //エラーが出る

なぜエラーが起きるかというと、オプショナル型で宣言された変数はそうでない変数とは別物だからです。

オプショナル型はnilであることを許すために変数の周りを何か膜で覆われているとイメージです。
普通の変数と一緒に利用するためには、その膜を割ってあげなければなりません。
その割ってあげることをアンラップと言います。

エラーがでない例
var count1: Int? = 1
var count2: Int = 2
print(count1! + count2) //3

となります。

アンラップ

アンラップの方法は複数あります。
代表的なものを3つあげます。
・強制的アンラップ
・オプショナルバインディング
・オプショナルチェイニング

強制的アンラップ

オプショナル型変数の後ろに!をつけるだけです。
これは、変数の中身が何であれアンラップするため、変数がnilになっていないということに気をつけなければなりません。

強制的アンラップ
var count1: Int? = 1
var count2: Int = 2
print(count1! + count2) //3

オプショナルバインディング

if文を使うことによってオプショナル型がnilかどうかによって処理を変えることができます。
下のようにオプショナル型の変数を代入することによってその変数はアンラップされます。

オプショナルバインディング
var count: Int? = 1

if let countShow = count {
    print(countShow) //1
}

オプショナルチェイニング

オプショナル型の変数のあとに?をつけます。
オプショナル型の変数のあとに続くプロパティやメソッドを呼び出す時に使えます。

オプショナルチェイニング
people?.name