SwiftUIのEmptyViewはレイアウトに影響しないことで知られています。 EmptyViewはViewが存在しないことを意味するのでonAppearメソッドも呼ばれないと想定されます。 ただ、RootViewにEmptyViewのみを配置した場合はonAppearメソッドは呼ばれるので注意が必要です。
@main
struct SampleApp: App {
var body: some Scene {
WindowGroup {
ContentView() // ContentViewだけを表示するとonAppearは呼ばれる
// ContentView2() // ContentView2だけを表示するとonAppearは呼ばれない
}
}
}
struct ContentView: View {
var body: some View {
EmptyView()
.onAppear {
print("onAppear is called")
}
}
}
struct ContentView2: View {
var body: some View {
EmptyView()
EmptyView()
.onAppear {
print("onAppear is not called")
}
}
}
ContentViewではView HierarchyにEmptyViewがあって、ContentView2ではView HierarchyにEmptyViewがないのでonAppearは呼ばれないみたいです。
ContentView | ContentView2 |
---|---|
onAppear is called | onAppear is not called |
おわりに
簡潔な記事ですが、EmptyViewのonAppearはRootViewに単体で配置すると呼ばれるという備忘録でした。