【Swift】associated value(関連値)って何?使い方や値の確認方法、活用シーンをわかりやすく解説

Swiftで列挙型(enum)を使っていると、.success(let value).some(let value) のような書き方を見かけることがあります。

これが associated value(関連値) です。

この記事では、associated value(関連値)とは何か? という基本的な部分から、使い方、値の取り出し方、活用シーン、注意点までわかりやすく解説します。

associated value(関連値)とは?

associated value(関連値) とは、Swiftのenum(列挙型)の各ケースに、追加のデータを持たせる仕組みです。

通常のenumは「状態」を表すだけですが、その状態に応じた値も一緒に保持できるのが「関連値付きenum」です。

例:関連値のあるenumの定義

このように定義すると、.success("OK").failure(404) のように 値とセットで使うことができます。

ポイントとしては以下の通りです。

  • ケースごとに異なる型や数の値を持たせられる
  • 取り出す際はswitchでパターンマッチを行うletvarで値を受け取れる)
  • 構造体やクラスを用意しなくても、状態と値を一緒に管理できる

値の確認方法(取り出し方)

switch 文で、各ケースの中にある関連値を let で取り出すのが基本です。

これで .success("データ取得成功")"データ取得成功" という文字列が message に取り出されます。

if case を使った簡潔な取り出し

1つのパターンだけを確認したい場合は、if case が便利です。

複数の変数を持つ場合でも同様に取り出せます。

複数の関連値を持たせることも可能

複数の関連値を持たせることも可能です。

このコードでは、LoginStateという列挙型に2つのケースを定義しています。

  • .loggedIn では「ユーザー名」と「トークン」という2つの関連値を保持できる
  • .loggedOut では関連値を持たず、単純にログアウト状態を表す

よく使われるSwift標準の関連値付きenum

実はSwift標準ライブラリの中にも、関連値付きenumが多く使われています。

ここでは代表的な例と活用シーンを紹介します。

Optional(オプショナル)

Optionalは、値があるかどうかを表すためのenumです。

実はif let name = name という構文も、この .some(let value) を書きやすくしたものです。

Result<Success, Failure>

Resultは、処理の成功・失敗をひとまとめに管理するためのenumです。

成功ケースには返したい値を、失敗ケースにはエラーを関連付けて保持できるのが特徴です。

これにより、関数の返り値で「正常値」か「エラー情報」かを一貫して扱えます。

活用シーン

関連値付きenumが特に効果を発揮するのは、状態と追加情報をセットで扱いたい場面です。

  • API通信の結果(成功 or 失敗 + エラー情報)
  • 状態管理(ログイン中かどうか + ユーザー情報)
  • StoreKitを使ったアイテム課金処理の結果
  • UIの表示状態(読み込み中 / エラー発生 + エラーメッセージ)
  • 画面遷移先とそのパラメータをenumで管理

これらの例では、単なるフラグやブール値では表現しきれない「付随するデータ」を伴うため、関連値が役立ちます。

注意点

便利な一方で、使う際にはいくつかの注意が必要です。

  • 型が異なる複数の値を一つのenumケースでまとめたいときに便利だが、値の取り出しには switchif case を正しく使う必要がある
  • 値の取り出しを忘れると処理がスキップされるので注意
  • 一部のパターンしか扱わないときは@unknown defaultdefault:を忘れずに入れる

まとめ

関連値付きenumは、Swiftにおいて状態管理とデータ保持を同時に行える強力な仕組みです。

項目 内容
何か? enum の各ケースに値を持たせる機能
定義方法 case name(valueType) のように書く
取り出し方法 switchif caselet を使って取り出す
活用シーン API結果、画面遷移、状態管理、エラーハンドリングなど
注意点 switch でしっかり全パターンを処理すること

OptionalResultのように標準ライブラリでも多用されており、APIレスポンスや画面状態の管理など実用的な場面で大いに役立ちます。

これを正しく理解しておくと、コードをより安全かつシンプルに書けるようになりますよ!

おすすめの記事