「データがあるときだけ処理したいけど、nil(値なし)のときはスルーしたい…」
そんなときに大活躍するのが オプショナルチェーン(Optional Chaining) という便利な仕組みです!
Swiftを使っていると、「値があるかもしれないし、ないかもしれない」っていう場面がたくさん出てきますよね。
そのたびに if let
や guard let
を使ってチェックするのも大変…
でもオプショナルチェーンを使えば、1行でスッキリ、安全にアクセスできる ようになるんです!
この記事では、Swift初心者の方にもわかりやすく、意味・使い方・具体例 をたっぷり使って解説していきます!
オプショナルチェーンってなに?
オプショナルチェーンは、オプショナル型のプロパティやメソッドに「?」をつけて、安全にアクセスする書き方です。
例えばこんなコード:
1 2 |
let nameLength = user?.profile?.name?.count |
これ、もし user
や profile
や name
のどれかが nil
だったら、自動的に nameLength
は nil
になります。
エラーにならず、そっと nil を返してくれる のがポイント!
どうやって使うの?
基本の書き方はこれです。
1 2 |
//プロパティの場合 optionalValue?.property |
1 2 3 |
//メソッドの場合 optionalValue?.method() |
「?」をはさむことで、値があるときだけ実行されてなければスルーされます。
「.」の代わりに「?.」を使う、これだけ覚えればOK!
具体例①:ユーザーの名前を取得したい!
たとえば、こんなデータ構造があるとします。
1 2 3 4 5 6 7 8 9 10 |
struct Profile { var name: String } struct User { var profile: Profile? } let user = User(profile: Profile(name: "Taro")) |
このとき、user
→ profile
→ name
とたどって、名前を取得したいけど、profile
が nil かもしれない…
そんなときはこう書きます。
1 2 |
let userName = user.profile?.name |
これだけで、profile が存在する場合だけ name を取得できます。
もし profile が nil なら、userName は自動的に nil になります。
具体例②:メソッドも呼び出せる!
オプショナルチェーンは、プロパティだけじゃなくメソッドにも使えます!
1 2 3 4 5 6 7 8 9 10 |
struct Document { func printTitle() { print("タイトルを表示しました!") } } var doc: Document? = Document() doc?.printTitle() // ← doc が nil じゃなければメソッド実行! |
doc
が nil なら何も起こらずスルー。
doc
に値がある場合のみ printTitle()
が実行されます。
具体例③:複数をつなげてもOK!
オプショナルチェーンは、何段でも続けて書けます。
1 2 |
let titleLength = library?.currentBook?.title?.count |
このように、途中のどこかが nil でも、全部安全にチェックしながら進んでくれるんです!
具体例④:代わりの値を入れたいときは?
??
を使えば、nil のときに代わりの値を入れることもできます!
1 2 |
let length = user.profile?.name?.count ?? 0 |
name
が存在すればその文字数、なければ、??の後に指定した 0
が入ります。
「nilだったら◯◯を使いたい」というときにとっても便利です!
オプショナルチェーンと if let / guard let の違いは?
if let
や guard let
では値を取り出して別の変数に入れてから使います。
1 2 3 4 |
if let name = user.profile?.name { print(name) } |
こっちのほうが中で複雑な処理をしたいときには向いています。
一方、オプショナルチェーンは「ただ値を取り出したい」「ちょっと使いたい」時にとても便利です!
まとめ
- オプショナルチェーンは「?.」で安全に値にアクセスできる機能!
- 値があるときだけ処理して、なければ nil を返してくれる!
- プロパティにもメソッドにも使える!
- ネストが深くても一気に書ける!
??
でデフォルト値も簡単に設定できる!
Swiftでは、「値があるかどうか」を意識することがとても大事です。
オプショナルチェーンを使えば、安全・簡単・スマートにコードを書けるようになります!
「nilチェックでごちゃごちゃする…」と感じたことがある人はぜひオプショナルチェーンを使ってみてくださいね。
参考リンク
Apple公式ドキュメント:Swift Language Guide - Optional Chaining