SwiftUIにおける**ステート管理(状態管理)**は、ユーザーインターフェースとデータの状態を同期させるための非常に重要な仕組みです。SwiftUIでは、いくつかのプロパティラッパー(属性)を使用することで、UIと状態の関係を簡潔に記述できます。代表的なものとして以下の3つがあります:
1. @State
@State
概要
@Stateは、ビュー内のローカルな状態を保持するためのプロパティラッパーです。SwiftUIがこの変数の変更を監視し、自動的にビューを再描画します。
使用例
特徴
-
Viewの内部専用の状態管理。
-
値が変わると、関連するViewが再描画される。
-
@Stateは構造体(View)の再生成の間も値を保持する。
2. @Binding
@Binding
概要
@Bindingは、別のViewから渡された@Stateプロパティを双方向に共有するために使います。親Viewから子Viewに状態を渡して、子Viewで変更できるようにします。
使用例(親子関係)
特徴
-
親Viewの状態を子Viewが変更可能な形で受け取る。
-
@Stateと@Bindingはペアで使われることが多い。 -
@Bindingの引数には**$(ドル記号)**を付けて渡す。
3. @ObservedObject
@ObservedObject
概要
@ObservedObjectは、外部の参照型(クラス)を使った状態管理を行うためのプロパティラッパーです。クラスはObservableObjectプロトコルに準拠し、@Publishedを使ってプロパティの変更を通知します。
モデルの定義
Viewでの使用
特徴
-
複数のView間で共有される状態を扱うのに向いている。
-
@Publishedで変更を通知。 -
参照型であるため、状態が共有されやすい。
比較まとめ
| プロパティラッパー | 適用対象 | 使用用途 | 共有の可否 |
|---|---|---|---|
@State |
View内のローカル変数 | 単一View内の状態 | 不可 |
@Binding |
外部の@State |
状態を子Viewに伝播し、双方向で制御 | 可 |
@ObservedObject |
外部のクラス | 参照型で複数View間の共有 | 可 |
必要に応じて、より高度な@EnvironmentObjectやStateObjectなどの使い方も存在しますが、まずはこの3つを理解しておくことがSwiftUIの状態管理の基礎となります。
生成日:2025/05/04