1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

@ObservedObjectについて学ぶべし

Posted at

@ObservedObjectは、SwiftUIにおけるプロパティラッパーの一つです。@ObservedObjectを使うことで、ObservableObjectプロトコルに準拠したオブジェクトの変更を監視し、ビューの再描画をトリガーすることができます。

具体的には、以下の手順で@ObservedObjectを使用します

1、監視したいクラスや構造体を作成し、ObservableObjectプロトコルに準拠させます。このクラスや構造体は、ビューで使用されるデータや状態を保持。

その際には@Published var という形で変数を宣言します。

class MyData: ObservableObject {
    @Published var count = 0
    
    func increment() {
        count += 1
    }
}
2、ビュー内で@ObservedObject属性を使用して、監視したいオブジェクトを宣言します。
struct MyView: View {
    @ObservedObject var myData = MyData()
    
    var body: some View {
        VStack {
            Text("Count: \(myData.count)")
            Button("Increment") {
                myData.increment()
            }
        }
    }
}
3、@ObservedObject属性を使うことで、ビューはmyDataオブジェクトの変更を監視し、その変更があった場合にビューを再描画します。

上記の例では、MyDataクラスをObservableObjectプロトコルに準拠させています。その中には、@Published属性が付けられたcountプロパティと、そのプロパティを変更するincrementメソッドがあります。

MyViewでは、@ObservedObject属性を使ってmyDataオブジェクトを宣言しています。これにより、ビューはmyDataの変更を監視し、countの値が変更されるたびにビューを再描画します。ボタンをタップすると、incrementメソッドが呼ばれてcountの値が増え、ビューが再描画されて新しい値が表示されます。

@ObservedObjectは、オブジェクトの変更を監視するための重要な機能であり、データの変更をリアルタイムに反映させるのに役立ちます。

以前学習した、@Stateの場合は、@Bindingで渡していましたが、@ObservedObjectの場合は、インスタンスで渡してあげると全てのデータまとめて渡すことができます。

@Bindingとの使い分け

一旦おさらい。

@ObservedObjectは、ビューが特定のオブジェクトの変更を監視するために使用されます。監視するオブジェクトは、ObservableObjectプロトコルに準拠している必要があります。
一般的に、@ObservedObjectはビューとオブジェクトの間の一対多の関係を表します。つまり、ビューが1つのオブジェクトを監視し、そのオブジェクトの状態変化に応じて再描画を行います。

使い分けの例:

親ビューから子ビューに値を渡す場合は、@Bindingを使用します。子ビューが値を変更すると、親ビューにも反映されます。
親ビューが特定のオブジェクトの変更を監視する場合は、@ObservedObjectを使用します。オブジェクトの状態が変化すると、ビューが再描画されます。
要約すると、@Bindingは値の双方向の通信に使用され、ビュー間の関係を表現します。一方、@ObservedObjectはオブジェクトの変更を監視し、ビューを再描画するために使用されます。適切なプロパティラッパーを選択することで、データフローとコミュニケーションの効率性を高めることができます

最初は@Bindingなのか@ObservedObjectのどちらを使えばいいのかわかりませんでしたが、アプリを作るうちに少しずつ慣れてきた気がします。SwiftUI独自の宣言方法に慣れる必要がありますね。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?