プロパティをいじるのに便利ですが。
実行の順序ですよ。
これは、予想通りですが。
Text("hello")
.onAppear {
print("Text onAppear")
}
.onChange(of: true, initial: true) {
print("Text onChange")
}
.task {
print("Text task")
}
// Text onAppear
// Text onChange
// Text task
記述の順序にかかわらず task() は最後に実行されます。
Text("hello")
.task { print("Text task") }
.onAppear { print("Text onAppear") }
.onChange(of: true, initial: true) { print("Text onChange") }
// Text onAppear
// Text onChange
// Text task
onAppear() と .onChange(initial: true) は記述順。
Text("hello")
.task { print("Text task") }
.onChange(of: true, initial: true) { print("Text onChange") }
.onAppear { print("Text onAppear") }
// Text onChange
// Text onAppear
// Text task
では、View のネスト。
Group {
VStack {
Text("hello")
.task { print("Text task") }
.onChange(of: true, initial: true) { print("Text onChange") }
.onAppear { print("Text onAppear") }
}
.task { print(" VStack task") }
.onChange(of: true, initial: true) { print(" VStack onChange") }
.onAppear { print(" VStack onAppear") }
}
.task { print("Group task") }
.onChange(of: true, initial: true) { print("Group onChange") }
.onAppear { print("Group onAppear") }
// Text onChange
// Text onAppear
// VStack onChange
// VStack onAppear
// Group onChange
// Group onAppear
// Text task
// VStack task
// Group task
task() は 最上位の View の表示後にまとめて実行されることに驚きです。
■ まとめ
- ネストの深いものから順番に実行される。
- onAppear(), onChange(initial: true) は記述順に実行される。
- task() は最上位 View の表示後にまとめて実行される。
結構、手が止まるんですよね、ここらへん。