データクラスを複数のViewで同期して共有することができます。
公式ドキュメント: https://developer.apple.com/documentation/swiftui/observedobject
実装
- データを共有する
ObservableObject
のモデルを用意します。
class User: ObservableObject {
@Published var name = "山田太郎"
}
2. 1のデータクラスを利用するViewで @ObservedObject
をつけてインスタンスを宣言します。
struct ContentView: View {
@ObservedObject var user = User()
}
3. 2で定義したインスタンスを子Viewに渡します。子Viewも同様に
をつけてデータを定義して、body内で参照します。@ObservedObject
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 も書き変わるので、データが同期されていることがわかります。