Avatar
import SwiftUI struct ContentView: View { @ObservedObject var counter: Counter = .shared var body: some View { print("ContentView.body") return NavigationView { VStack { HStack { Text("\(counter.count)") Button("+") { self.counter.increment() } } NavigationLink(destination: AView(count: counter.count)) { Text("Open A") } } } } } struct AView: View { let count: Int var body: some View { print("AView.body") return VStack { HStack { Text("\(count)") Button("+") { Counter.shared.increment() } } NavigationLink(destination: BView(count: count)) { Text("Open B") } } } } struct BView: View { let count: Int var body: some View { print("BView.body") return HStack { Text("\(count)") Button("+") { Counter.shared.increment() } } } } final class Counter: ObservableObject { @Published private(set) var count: Int = 0 func increment() { count += 1 } static let shared: Counter = .init() }
4:04 AM
@ObservedObject の影響範囲を調べてて、↑で AView を開いてから + ボタン押しても変更が反映されるのがおどろきだったんですが、さらに BView を開いて + ボタンを押しても変更は反映されないし、そこから Back して AView に戻ってから + ボタンを押しても今度は変更が反映されないんですが、挙動がおかしくないですか? (edited)
4:06 AM
最初に AView を開いたときに変更が反映されるのがおかしいのか、それとも AView に戻ってきたときや BView で変更が反映されないのがおかしいのか。