【Swift】オプショナル型の意味と使い方をゼロから解説

【Swift】 オプショナル型って?

Swiftには、値が何もないことを示すnilを表すためにオプショナル型(Optional)が存在します。

この記事では、筆者が疑問に感じた

  • オプショナル型って何?
  • オプショナル型はどこで使われるのか?
  • オプショナル型ってどうやって使うのか?

を中心にまとめております。

目次

『オプショナル型(Optional)』とは

Swiftでは、値が存在しないことを処理するための型があります。

それがオプショナル型です。

オプショナル型の変数は、以下のいずれかを示します。

  • 「値が存在し、それは〜に等しい」
  • 「値が存在しない」

オプショナル型の宣言方法

宣言方法は2通りあります。

let shortForm: Int? // 短縮版
let longForm: Optional<Int> // 正式な宣言方法

一般的に使われているのは短縮版のようです。

変数の型の後に、クエスチョンマーク(?)をつけることで宣言することができます。

この宣言の仕方で自動的にnilが格納されるため、以下のコードと同じ意味をもちます。

let shortForm: Int? = nil
let longForm: Optional<Int> = nil

オプショナル型は値をラップしている

オプショナル型の変数に格納された値は、値そのものではないのです。

var str: String?
str = "abc"

print(str)
Optional("abc")

文字列の値がOptionalでラップされてる😱

どうやらこのままだと使えない場合があるようです。
例えば、数値の計算だったりします。

そういう場面で、オプショナル型の変数から値を取り出すには、アンラップという処理が必要になります。

値を取り出すアンラップ処理

アンラップ処理は、オプショナル型の変数から値を取り出す処理です。

値を取り出すために、次の2つのステップを経てアンラップします。

STEP
オプショナル型の変数に値が入っていることを確認する

オプショナル型の変数の値がnilと等しくないことを確認します。

STEP
アンラップ処理

オプショナル変数から値を取り出します。

var count = 0
var opt: Int? = 2

if opt != nil { // STEP 1: オプショナル型の変数がnilでないことを確認
    let unwrap = opt! // STEP 2: アンラップ処理
    count = count + unwrap
}

空っぽのオプショナル変数をアンラップしようとした場合、アプリがエラーを引き起こしクラッシュしてしまいます。

アプリがクラッシュしないよう、nilに対して安全に取り扱える仕様になっているのか🤔

アンラップ処理の4つの方法

強制アンラップ

この方法は、オプショナル型の変数の後ろにエクスクラメーション(!)をつける方法です。

var opt: Int?
opt = 5
var sum = 0

if opt != nil {
    let unwrap = opt! // 強制アンラップ
    sum = sum + unwrap
}

暗黙的アンラップ

この方法は、オプショナル型の変数の宣言時に、後ろにエクスクラメーション(!)をつける方法です。

var opt: Int!
opt = 5
var sum = 0

if opt != nil {
    sum = sum + opt // 宣言時のオプショナル型の変数をそのまま使える
}

暗黙的アンラップは、変数を暗黙的アンラップされたオプショナル型として宣言しています。
オプショナル型の変数が使われるタイミングで、自動的にアンラップされます。

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

この方法は、オプショナル型の変数がnilかどうかを確かめるとともに、アンラップした値を定数に格納する方法です。

var opt: Int?
opt = 5
var sum = 0

if let unwrap = opt {
    sum = sum + unwrap
}

少ないコード量でアンラップ処理が実現できるのか🤔
一石二鳥って感じ!

Nil結合演算子(Nil-Coalescing Operator)

この方法は、オプショナル型の変数がnilである場合にデフォルト値を設定し、nilでない場合にアンラップする方法です。

クエスチョンマークを2つ並べたNil結合演算子(Nil-Coalescing Operator)(??)の後ろに、デフォルト値を設定します。

var opt: Int?
opt = 5

let unwrap = opt ?? 0 // optはnilではないためアンラップされる
print(unwrap) // 実行結果:5

まとめ

この記事では、Swiftのオプショナル型について解説しました。

  • オプショナル型は、値が存在しないnilを扱うための型
  • オプショナル型の値はOptional(…)でラップされている
  • オプショナル型の値を使うときはアンラップ処理が必要

【Swift】 オプショナル型って?

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

よぴのアバター よぴ Swift / iOSエンジニア

ゼロから始めるSwift/iOSエンジニア
デザインや開発に携わる人たちと繋がって、学び合える関係を作りたいです。

▷ iOSアプリ個人開発
▷ 2022/10/01からスタート
▷ 制作過程や学んだことをブログに載せていきます

目次