WEB-API もあるようですが。
❯ curl -s https://github.com/users/benigumocom/contributions
で、HTMLが取得できるというのでやってみる。
わーい。
guard ってなんとなく嫌いだなあ。
WEB-API もあるようですが。
❯ curl -s https://github.com/users/benigumocom/contributions
で、HTMLが取得できるというのでやってみる。
わーい。
guard ってなんとなく嫌いだなあ。
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 が必要でない限り使う必要がないな。
この id を書き換えることで task のクロージャ内の処理を繰り返すことができるんですね !
onAppear と同様に初回だけだと思ってましたわ。
func task<T>(
id value: T,
priority: TaskPriority = .userInitiated,
_ action: @escaping () async -> Void
) -> some View where T : Equatable
id
The value to observe for changes. The value must conform to the Equatable protocol.
👉 task(id:priority:_:) | Apple Developer Documentation
公開されている無料現在時刻取得のAPIを使います。
# curl "http://worldtimeapi.org/api/timezone/Asia/Tokyo"
{
"abbreviation": "JST",
"client_ip": "2675:6780:4e0:3200:a181:c317:3902:c121",
"datetime": "2024-03-26T22:10:13.824894+09:00",
"day_of_week": 2,
"day_of_year": 86,
"dst": false,
"dst_from": null,
"dst_offset": 0,
"dst_until": null,
"raw_offset": 32400,
"timezone": "Asia/Tokyo",
"unixtime": 1711458613,
"utc_datetime": "2024-03-26T13:10:13.824894+00:00",
"utc_offset": "+09:00",
"week_number": 13
}
クライアント側はシンプルな実装にしておきます。
let url = URL(string: "https://worldtimeapi.org/api/timezone/Asia/Tokyo.txt")!
var lines: [String] = []
for try await line in url.lines {
lines.append(line)
}
print(String(lines[2].components(separatedBy: "T")[1]))
// 22:10:13.824894+09:00
👉 【SwiftUI】シンプルに HTTPリクエスト でお天気情報取得
task (id:) を使っておいて、ボタンで id を更新させます。
「id」って便利な使えるやつなんですね !