📖

@Published とは

2023/05/22に公開

プロパティラッパーの一つ。

プロパティの値が変更されるたびに、関連するビューに変更が反映されます。

ObservableObject プロトコルを適用したクラスまたは構造体でしか使用できない。

上記のクラスまたは構造体で@Published属性が付いたプロパティの値を監視する。→変更があればBindingされているViewが更新される

@Stateとの違い

@Published属性と@State属性は、SwiftUIにおける状態の管理に使用される属性ですが、いくつかの違いがあります。

  1. 用途:
    • @Published属性: @Published属性は、ObservableObjectプロトコルを適用したクラスまたは構造体で使用されます。状態の変更を監視し、それを他のオブジェクトに公開するために使用されます。
    • @State属性: @State属性は、ビュー内の状態の管理に使用されます。ビュー内のプロパティの変更を監視し、ビューを再描画するために使用されます。
  • まとめ:
    • @Published属性はObservableObject を適用しクラスまたは構造体でしか使えない
    • @State属性はViewの中で値を監視する
  1. 実装の場所:
    • @Published属性: @Published属性は、ObservableObjectを実装するクラスまたは構造体のプロパティに適用されます。通常、ObservableObjectを適用した独立したクラスやビューモデルに使用されます。
    • @State属性: @State属性は、ビュー内のプロパティに直接適用されます。通常、ビューの状態を管理するために使用されます。
  2. オブジェクトの公開:
    • @Published属性: @Published属性を持つプロパティは、変更が発生したときに自動的に変更イベントを発行します。これにより、他のオブジェクトがその変更を監視し、必要な場合に更新を受け取ることができます。
    • @State属性: @State属性を持つプロパティは、ビュー内でのみ使用されます。変更が発生した場合、SwiftUIは自動的にビューを再描画して変更を反映しますが、他のオブジェクトが変更を監視することはありません。

簡潔に言えば、@Published属性は外部のオブジェクトに状態の変更を公開するために使用され、@State属性はビュー内でのみ使用されるローカルな状態の管理に使用されます。

Discussion