SwiftのOptionalとは

Swift

SwiftのOptionalとは

はじめに

Swift関連の記事を書きたいと思いましたが、
Swiftの記事を書くと必ずと言って良いほどOptionalという単語が出てくるため先にOptionalについて書きたいと思います。

Optionalとは

  • Optionalとはデータ型の一種である
    正式名称はOptional型
  • Optional型で定義された変数はnilを許容する
    非Optional型にはnilを代入することはできない
    非Optional型の正式名称はImplicitly Unwrapped Optional型

定義の仕方

型宣言の後ろに「?」書くことでOptional型が定義されます。
nilを許容するので空で宣言できます。
下記の定義を日本語に直すと
「nameはOptional型でString型の値を持っているかもしれないし、持っていないかもしれない
です。

nilを許容したくない場合は、
型宣言の後ろに「!」を書くことでImplicitly Unwrapped Optional型として定義されます。
Implicitly Unwrapped Optional型として定義する場合はnilを許容しないので宣言時に値を入れておく必要があります。
nilを許容しないので初期値を入れておく必要があります。

実際の動き

Optional型で定義された変数を使用する際はアンラップする必要があります。

Optional型をアンラップする場合は基本的に下記二つの構文を使います。
下記二つの構文を使うことでOptional型に安全にアンラップできます。

  • if-let構文
    右辺のOptional型をアンラップして左辺のnameに代入します。
    ifのスコープ内ではOptional型ではなくString型として扱えます。

  • guard-let構文
    右辺のOptional型をアンラップして左辺のnameに代入します。
    if-let構文と違う点はアンラップ後の変数をifのスコープ外で使用できる点です。
    guard-let構文はtrueの場合の処理が無いif文と考えると分かりやすいです。

  • 例外
    上記二つのアクセス方法以外にも強制アンラップという方法があります。
    変数の後ろに!をつけることで強制的にアンラップすることができます。
    しかしこの方法はOptional型の変数がnilだった場合はクラッシュします。

    nameに値が入っているため一応動く

    nilのnameを強制アンラップしているためクラッシュ

まとめ

今回は簡単にOptional型について書きました。
紹介した使い方以外にもメソッドの引数をOptional型にするなど様々な使い方がありますが、
非常に長くなるので割愛します。

OptionalはSwiftをやるにあたって基礎中の基礎なので抑えておきたいところです。
しかしプログラミング初心者の場合はそもそも
nilってなに?
nullと何が違うのか分からないなど躓きやすいポイントでもあります。

この記事を書いた人

弘田諒
弘田諒
職種 : iOSエンジニア

Swift