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)