ブログ
 

【Swift】オプショナル型

       

オプショナル型とは

オプショナル型とは値が空の状態(nil)を保持することができるデータ型です。
会員登録を例にすると、名前や電話番号は入力が必須なのに対して、性別や年齢は入力してもしなくても登録ができます。ある人は性別と年齢を入力したけれど、ある人は両方とも未入力(nil)で登録する場合があるように、オプショナル型は入力してもしなくてもよい項目がある場合にとても有効です。

nilを変数に代入するためには、型を明示的に記述します。
そして、その型の後ろに「?」をつけることでオプショナル型となります。

var age: Int? = nil

変数ageは整数型です。整数型の変数にはnilを代入することはできませんが、Intの後ろに「?」を記述することで整数の他にもnilを格納することができるようになります。また、Int?と記述したため初期値にnilを代入する必要はなく、整数を初期値に代入しても問題はありません。

オプショナル型の使い方

オプショナル型の変数にはnilを代入できるため、変数の値がnilであってもエラーになりません。

var name: String?
print(name)

実行結果:

nil

また、オプショナル型は配列にも使用できます。

var names: Array?
names = ["Suzuki", "Yamada", "Tanaka"]
print(names)

実行結果:

Optional(["Suzuki", "Yamada", "Tanaka"])

オプショナル型のメリット

なぜ「?」や「!」といったキーワードを付けてまで、値が空の状態を保持する必要があるのだろうかと思った方もいると思います。そこで、言語の設計段階で、どの型にも「?」や「!」を記述しなくても空の状態(nil)を保持できるとします。(こちらの方が記述も少ない。)

var hoge: String = nil

Swiftは実行前に「型」を用いて処理に問題がないか確認しています。そのため、上記のコードのように文字列型に空の状態を保持できるようにしてしまうと、アプリの実行前にSwiftがコードの正当性を確認できないため、実行時にクラッシュしてしまいます。

var num: Int = nil
print(num + 1) // エラーにならず、クラッシュする

上記のコードだけ見れば、nilと1は足せないことに気づくと思います。しかし、このコードが何千、何万行の中に存在した場合、気づけない時もあります。また、このようのコードを開発者側がいつも気に留めておく必要があるのも大変です。

そこで「オプショナル型」を使用し、明示的に「?」や「!」をといったキーワードをつけることで、開発者側は毎回、変数に入っている値を確認する必要がなくなります。

var num: Int? = nil
print(num + 1) // 型が異なるためエラーになる

アンラップ

オプショナル型と他の型とで計算などをする際には、オプショナル型の変数から値のみを取得する必要があります。「オプショナル型の使い方」での実行結果を見ると、「Optional()」内に値が入っているのがわかると思います。この「Optional()」から値を取り出す方法をアンラップと言います。

var num: Int? = 10
print(num)
print(num! + 5)

実行結果:

Optional(10)
15

上記のprint部分のように、オプショナル型の変数の後ろに「!」を記述することで、オプショナル型の変数から値のみを取り出すことができます。アンラップする際には、オプショナル型の変数には値が代入されていること(nilでないこと)が絶対です。変数の値がnilの際にアンラップすると、コードの実行時にクラッシュしてしまいます。

var num: Int? = nil
print(num! + 5) // クラッシュ

オプショナル型の変数をアンラップする際には、開発者が値があることを確認した上で使用するようにします。

最後に

今回はとても簡単に説明してしまいましたが、興味がある方はオプショナル型についてもっと調べてみてください。
また、実際に使用することでありがたみなどをもっと感じられると思います。
最後まで読んでくださり、ありがとうございました。

 
  • このエントリーをはてなブックマークに追加