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 クラスは「共有したいデータの所有者側」で定義・生成」 するのが基本