
「データがあるときだけ処理したいけど、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
