ObservableObject
ObservableObject は、View に対して状態変化を通知できる/View がその状態変化を購読できる class。
View は ObservableObject を @StateObject や @ObservableObject として保持している時、その objectWillchange を購読しているらしい。ObservableObject には @Published な property を定義できて、@Published な property に変更が加わると、objectWillchange が発火される。
定義
定義は以下のようになっている。求めているのは objectWillChange のみ。ObservableObject の値が変化する直前に、この Publisher から値を送出される必要がある。Publisher はデフォルトで用意されているものがあるが、差し替えることもできる。 code:swift
public protocol ObservableObject: AnyObject {
associatedtype ObjectWillChangePublisher: Publisher
= ObservableObjectPublisher where Self.ObjectWillChangePublisher.Failure == Never
// objectが変化する "前に" 値を送出する
var objectWillChange: Self.ObjectWillChangePublisher { get }
}
用途
View は値型であり、描画後はすぐにインスタンスが破棄される。一方で、ObservableObject は参照型であり、データのライフサイクルの管理や、副作用の処理、既存のドメインロジックとの統合などが行える。ObservableObject は View に対して表示すべきデータを提供する存在であるため、View とデータ依存の境界としての役割を持つとも言える。 code:text
+------+ +----------+------------+
| View | <==============| | Data Model |
+------+ | | +-+ |
| |Observable| +-+ +-+ |
+---------+ | Object | +-+ |
| | | | +-+ |
+------+ +------+ | | +-+ |
| View | | View | <===| | |
+------+ +------+ +----------+------------+
^ ||
\======================/
作成方法
利用方法
インスタンスの保持はしない
body の実行の直前にインスタンス化される
参考