class CounterModel: ObservableObject {
@Published var count: Int = 0
}
struct CounterPage: View {
@ObservedObject var counter = CounterModel()
var body: some View {
VStack(spacing: 20) {
Text("カウンター")
.font(.title)
Text("現在の値: \(counter.count)")
.font(.headline)
Button("+1") {
counter.count += 1
}
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
Button("リセット") {
counter.count = 0
}
.padding()
.background(Color.red)
.foregroundColor(.white)
.cornerRadius(8)
Spacer()
}
.padding()
}
}

使い方: 小画面に渡す
NavigationLink(destination: CounterPage(counter: counter)) {
Text("カウンターページへ")
}
小画面で受け取って使う
struct CounterPage: View {
@ObservedObject var counter: CounterModel
var body: some View {
VStack {
Text("現在の値: \(counter.count)")
Button("+1") { counter.count += 1 }
}
}
}
ObservableObject クラスは「共有したいデータの所有者側」で定義・生成」 するのが基本