Avatar
omochimetaru 6/25/2020 4:12 AM
AView, BView は Counterについての依存が見えない定義になっているから、ボタンを押しても何も起きないのはわかるけど
4:12 AM
最初に開いた後にボタンを押すと反応するのが不思議ですね
4:13 AM
ContentView.body の再描画が起こりつつ NavigationLink の遷移状態が継続しててAViewが再描画されてそう (edited)
4:14 AM
Navigationに関する一つ前までがステートツリーとして監視されているという実装だったとしたら現象の説明がつきそう。
4:14 AM
左上に前の画面のタイトルが表示されているから・・・
4:14 AM
で、そこは 前の画面の .navigationTitle() modifierだから
4:15 AM
一個前と今の画面だけがステート監視されてるみたいな。
4:16 AM
AからBに遷移した後は 根っこのContentView のステートは捨てられてるからCounter.countがイベントを発行してもBの再描画が起きない。
4:17 AM
なにがおかしいのかでいうと、 Counter.shared ってSwiftUIシステムから感知できない形で依存性をもってしまっている事じゃないですかね
4:18 AM
SwiftUI的には前提が壊れるからあらゆるバグが起きてもヨシという扱いだと思います。