💁♂️
【Swift】オプショナル型の意味と使い方をおさらい
『オプショナル型(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つのステップを経てアンラップします。
- オプショナル型の変数に値が入っていることを確認する
- アンラップ処理
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