「アンラップって何?」
Swiftの勉強を進める中で混乱しやすいのが“アンラップ”という考え方です。
アンラップとは、オプショナルから中身の値を取り出すこと。
ただし方法はいくつかあり、使い方を間違えるとアプリがクラッシュすることもあるので要注意だ。
この記事では初心者の方にもわかりやすいように、アンラップの意味・使い方を具体例つきで解説していきます!
アンラップってなに?
Swiftのオプショナル型(たとえば String?
や Int?
)は、値が入っているかもしれないし、入っていないかもしれない型です。
そのままでは中身が使えないので、一度“開封”して取り出す必要があります。
この「開封して取り出す」ことをアンラップ(unwrap)と言います。
どうやってアンラップするの?
Swiftでは主に以下の方法でアンラップができます:
if let
を使う(安全)guard let
を使う(安全)!
を使う(危険:強制アンラップ)??
を使う(デフォルト値付きアンラップ)
具体的に見ていきましょう!
具体例①:if let を使ったアンラップ(おすすめ)
安全にアンラップする方法としておすすめなのが if let 構文です。
1 2 3 4 5 6 7 8 |
let name: String? = "たろう" if let unwrappedName = name { print("こんにちは、\(unwrappedName)さん!") } else { print("名前が設定されていません") } |
このように値があるときだけ安全に取り出して処理できるのが if let
の特徴です。
初心者にもおすすめで、Swiftでよく使われる定番の書き方です。
具体例②:guard let を使ったアンラップ(関数内で便利)
if let と同様によく使われるのが guard let を使ったアンラップです。
1 2 3 4 5 6 7 8 |
func greet(_ name: String?) { guard let name = name else { print("名前が未入力です") return } print("こんにちは、\(name)さん!") } |
guard let
は、nilだったら早めに return して抜けるスタイル。
関数や条件分岐の中でよく使われます。
処理がスッキリ書けるのが魅力です。
具体例③:強制アンラップ(!)は使い方注意!
強制的にアンラップする方法もあります。
それが オプショナルの後ろに ! をつける強制アンラップ。
1 2 3 |
let age: Int? = 30 print("年齢は \(age!) 歳です") |
上記のように !
を使えば強制的に取り出せますが、age が nil だったらアプリが落ちます!
そのため、「絶対に値があると分かっているとき」以外では使わない方が安全です。
具体例④:?? でデフォルト値を指定
下記のように値がnil の場合はデフォルト値を設定する方法もあります。
1 2 3 4 |
let nickname: String? = nil let displayName = nickname ?? "ゲスト" print("こんにちは、\(displayName)さん!") |
??
を使うと、値が nil のときに代わりの値を設定できます。
とてもよく使われるテクニックで、処理を簡潔にしたいときにぴったりです。
どのアンラップ方法がベスト?
方法 | 安全性 | おすすめの場面 |
---|---|---|
if let | ◎ | 値があるときだけ使いたい場合。一般的に最も使われる |
guard let | ◎ | 関数の先頭で早期リターンしたいときに便利 |
??(nil合体) | ◎ | nilのときにデフォルト値を入れたいとき |
!(強制) | × | 値が絶対にあると確信があるときだけ使う |
まとめ
- アンラップとは「オプショナルから中身を取り出すこと」
if let
やguard let
で安全に取り出せる!
は強制アンラップ。nil だとクラッシュするので注意!??
でnilのときにデフォルト値を使える- 基本は
if let
やguard let
を使おう!
Swiftにおいて、アンラップは避けて通れない大事な考え方です。
まずは if let
や ??
のように、よく使うパターンからマスターしてみましょう!