Xcode Playground 便利です。
ちょっとしたコード記述の確認に使えます。
今回は、通信処理まわりのコードをやってみました。
Dog API というのを利用しました。
https://dog.ceo/api/breeds/image/random
{
"message": "https://images.dog.ceo/breeds/chow/n02112137_1015.jpg",
"status": "success"
}
🐶 JSON の取得
let url = "https://dog.ceo/api/breeds/image/random"
let session = URLSession.shared
guard let (data, response) = try? await session.data(from: URL(string: url)!),
let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200
else {
throw // ...
}
print(String(data: data, encoding: .utf8)!)
// {"message":"https:\/\/images.dog.ceo\/breeds\/lhasa\/n02098413_5594.jpg","status":"success"}
🐶 JSON デコード
struct Dog: Decodable {
let message: String
let status: String
}
let data: Data = // ...
do {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .millisecondsSince1970
print(try decoder.decode(Dog.self, from: data))
} catch {
throw // ...
}
// Dog(message: "https://images.dog.ceo/breeds/lhasa/n02098413_5594.jpg", status: "success")
🐶 WebKit で表示
let url = "https://images.dog.ceo/breeds/lhasa/n02098413_5594.jpg"
let view = WKWebView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
let request = URLRequest(url: URL(string: url)!)
view.load(request)
PlaygroundPage.current.liveView = view
🐶 まとめ
以上をまとめたコードを貼っておきます。
Xcode Playground にベタ貼りするだけで動きます。
実行時にアレなので強引にメインスレッドに揃えています。
Task { @MainActor in
// ...
}
前回に調べた内容を参考にしました。
👉 【Swift】URLSession.shared.dataTask() をうまく使いこなせない
よろしくおねがいします。
次回は、Concurrency をやってみたいと思います。