見出し画像

SwiftUIで行こう!- @ObservedObject!

@ObservedObjectについて記録しておきます。

何だか同じようなものとして@Stateがありますが、@ObservedObjectとは少し違いがあります。

@Stateについては

でも書きました。@Stateで宣言された変数はデータを監視して適宜データの変更をViewに伝えます。

同じように@ObservedObjectもデータを監視して適宜データの変更を行いますが、少し様子が違います。Combine frameworkであり@ObservedObjectは外部でObservableObjectプロトコルに適合させたclassで宣言して使います。

ちょっと個人的にわかりにくいと思っていたのが、@Bindingの使い方です。基本的には@Stateで宣言した変数を使ってView間でのデータの受け渡しをする場合@Stateと絡んで@Bindingを使い受け渡しをします。

@〜

の使い方を整理しておかないとごっちゃになってしまいます。

@ObservedObject

ですが、

ObservableObject プロトコルを使い定義して変更が必要な変数には

@Published

他、参考サイトです。

実際のコードをみてきます。

まず、プロトコルに適合した"class"を作ります。変数には@publishedをつけます。

class Order: ObservableObject {
   @Published var items = [String]()
}

Viewを作っていきます。

struct ContentView: View {
   @ObservedObject var order = Order()

   var body: some View {
       // your code here
   }
}

@Stateは個々のViewに対して使うのに対して@ObservedObjectは、外部で宣言したものをオブジェクトとして、まとめて使います。

@ObservedObjecを変数の前に接頭語としてつけて使います。この場合だと、

@ObservedObject var order = Order()

ですね。

@Stateと@ObservedObjectの使い方、使い分け方についてまとめてみました。

この記事が気に入ったらサポートをしてみませんか?