Avatar
Avatar
kebo
body の中で if を使うと条件式の値が変わった時に画面のライフタイム的にも一度画面が消えて再表示された扱いになる (onDisappear が呼ばれて onAppear が呼ばれ直す) ので,画面のライフタイムと一致するはずの @StateObject は初期化される方が正しい挙動な気がします.これを避けるために私はある程度複雑な View では body の中で if/switch をトップレベルで使わないように VStack で囲んだりしてますね.
omochimetaru 4/30/2023 2:29 AM
body の中で if/switch をトップレベルで使わないように VStack で囲んだりしてます
これってどういう意味ですか? VStackの中で if を使ったら、そのif配下においては同じ話ですよね?
2:30 AM
// 素早くトグルすれば値が生きている struct ContentViewE2: View { @State var toggle = false var body: some View { VStack { if toggle { VStack { TextView() Button { toggle.toggle() } label: { Text("toggle if") } } } else { VStack { TextView() Button { toggle.toggle() } label: { Text("toggle if") } } } } } }
2:30 AM
↑例えばこのようにしても同じ現象が起こります。 if があるのは 「トップレベル」でこそないですが、同じです。 (edited)