単純に GET によるレスポンスボディを取得したい。
こんなにシンプルな感じでかけるとは!
let url = URL(string: "https://example.com")!
for try await line in url.lines {
print(line)
}
👉 task(priority:_:) | Apple Developer Documentation
一行ごとに取れるようです。
試してみます。
import SwiftUI
import PlaygroundSupport
struct SampleView: View {
@State private var message = "Loading..."
var body: some View {
Text(message)
.task {
message = await getWeather()
}
}
private func getWeather() async -> String {
let url = URL(string: "https://wttr.in/?format=3")!
do {
var lines: [String] = []
for try await line in url.lines {
lines.append(line)
}
return lines.joined()
} catch {
return "Faild to load"
}
}
}
PlaygroundPage.current.setLiveView(
SampleView()
.frame(width: 300, height: 300)
)
簡単にレスポンスを確認するときに使えそうです。
👉 lines | Apple Developer Documentation
👉 chubin/wttr.in: :partly_sunny: The right way to check the weather
😅 まさか String() でこんなことができるとか
print(
(try? String(contentsOf: URL(string: "https://wttr.in/?format=3")!))
?? "Error!"
)
// Kisarazu, Japan: ⛅️ +25°C