Press "Enter" to skip to content

【SwiftUI】@ObserverdObject

データクラスを複数のViewで同期して共有することができます。

公式ドキュメント: https://developer.apple.com/documentation/swiftui/observedobject

実装

  1. データを共有するObservableObject のモデルを用意します。
class User: ObservableObject {
    @Published var name = "山田太郎"
}

2. 1のデータクラスを利用するViewで @ObservedObjectをつけてインスタンスを宣言します。

struct ContentView: View {
    @ObservedObject var user = User() 
}

3. 2で定義したインスタンスを子Viewに渡します。子Viewも同様に@ObservedObject をつけてデータを定義して、body内で参照します。

struct ContentView: View {
    @ObservedObject var user = User() 

    var body: some View {
        Text("ContentView: \(user.name)")
        ViewA(user: user)
    }
}

struct ViewA: View {
    @ObservedObject var user: User

    var body: some View {
        TextField("名前: ", text: $user.name)
    }
}

上記のコードで ViewA の TextField で user.name を書き換えると、同時に ContentView の Text も書き変わるので、データが同期されていることがわかります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です