WEB-API もあるようですが。
❯ curl -s https://github.com/users/benigumocom/contributions
で、HTMLが取得できるというのでやってみる。
わーい。
guard ってなんとなく嫌いだなあ。
WEB-API もあるようですが。
❯ curl -s https://github.com/users/benigumocom/contributions
で、HTMLが取得できるというのでやってみる。
わーい。
guard ってなんとなく嫌いだなあ。
プロパティをいじるのに便利ですが。
実行の順序ですよ。
これは、予想通りですが。
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 の表示後にまとめて実行される。
結構、手が止まるんですよね、ここらへん。
iOS17でクロージャ引数が1つのものは Deprecated と警告が出たりするので、
👉 onChange(of:perform:) | Apple Developer Documentation
こんなかんじで書いてました。
Text("\(count)")
.onChange(of: token) { _, newValue in
// do something ...
}
クソですね !
クロージャの引数なしと2つのものがあるんですね !
func onChange<V>(
of value: V,
initial: Bool = false,
_ action: @escaping () -> Void
) -> some View where V : Equatable
👉 onChange(of:initial:_:) | Apple Developer Documentation
func onChange<V>(
of value: V,
initial: Bool = false,
_ action: @escaping (V, V) -> Void
) -> some View where V : Equatable
👉 onChange(of:initial:_:) | Apple Developer Documentation
よって、引数なしのほうを使って、
フツーに以下のように書けば良かったのか。
Text("\(count)")
.onChange(of: token) {
print("\(token)")
}
なるほど。
IDE の選択肢の一番上をなんとなく選択してたのだろうと思います。
きちんと、ドキュメントを見ることって大事。
考えてみると、引数2つの記述
Text("\(count)")
.onChange(of: token) { oldValue, newValue in
// do something ...
}
は、oldValue が必要でない限り使う必要がないな。