💁‍♂️

【Swift】オプショナル型の意味と使い方をおさらい

2023/03/31に公開

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

値が存在しないことを処理するための型

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

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")

中身が数値だった場合、このままだと数値計算ができないことになります。

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

オプショナルから値を取り出すアンラップ処理

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

  1. オプショナル型の変数に値が入っていることを確認する
  2. アンラップ処理
var count = 0
var opt: Int? = 2

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

アンラップ処理の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でない場合にアンラップする方法

var opt: Int?
opt = 5

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

まとめ

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

Discussion