body の中で if を使うと条件式の値が変わった時に画面のライフタイム的にも一度画面が消えて再表示された扱いになる (onDisappear が呼ばれて onAppear が呼ばれ直す) ので,画面のライフタイムと一致するはずの @StateObject は初期化される方が正しい挙動な気がします.これを避けるために私はある程度複雑な View では body の中で if/switch をトップレベルで使わないように VStack で囲んだりしてますね. // 素早くトグルすれば値が生きている 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") } } } } } }if があるのは 「トップレベル」でこそないですが、同じです。 (edited)