URLSession data(from:) dengan async/await
Mengambil data secara asinkron dari API REST menggunakan API URLSession modern.
URLSession data(from:) dengan async/await adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
API URLSession Modern
Swift 5.5+ menyediakan kelebihan beban asinkron pada URLSession: data(from:delegate:) yang menangguhkan eksekusi alih-alih menggunakan panggilan balik.
let (data, response) = try await URLSession.shared.data(from: URL(string: "https://api.example.com/items")!)Fungsi Pengambilan Lengkap
Bungkus panggilan dalam fungsi asinkron yang dapat melempar kesalahan agar dapat dikomposisikan dan diuji.
func fetchItems() async throws -> [Item] {
let url = URL(string: "https://api.example.com/items")!
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode([Item].self, from: data)
}Memanggil dari SwiftUI
Panggil fungsi asinkron dari pengubah .task atau Task { } di dalam tindakan tombol.
struct ItemList: View {
@State private var items: [Item] = []
var body: some View {
List(items, id: \.id) { Text($0.name) }
.task { items = (try? await fetchItems()) ?? [] }
}
}URLRequest untuk Header Khusus
Buat URLRequest dengan metode, header, dan body, lalu teruskan ke data(for:).
var request = URLRequest(url: URL(string: "https://api.example.com/login")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONEncoder().encode(LoginBody(email: "a@b.com", password: "pass"))
let (data, _) = try await URLSession.shared.data(for: request)Memeriksa Status HTTP
Konversikan respons menjadi HTTPURLResponse dan verifikasi kode status sebelum melakukan dekode.
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
throw URLError(.badServerResponse)
}
let item = try JSONDecoder().decode(Item.self, from: data)Pembatalan
Membatalkan Task induk secara otomatis membatalkan permintaan URLSession yang sedang berlangsung.
let task = Task {
let items = try await fetchItems()
// ...
}
task.cancel() // cancels URLSession request if in-flightMengunggah Data
Gunakan upload(for:from:) untuk mengirim data biner atau unggahan formulir secara asinkron.
var request = URLRequest(url: uploadURL)
request.httpMethod = "POST"
let (data, _) = try await URLSession.shared.upload(for: request, from: imageData)Mengunduh Berkas
download(from:) mengunduh berkas ke URL sementara di disk, bukan ke dalam memori.
let (fileURL, _) = try await URLSession.shared.download(from: remoteURL)
let destURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("file.pdf")
try FileManager.default.moveItem(at: fileURL, to: destURL)Konfigurasi URLSession Khusus
Buat sesi khusus dengan batas waktu, kebijakan penyimpanan cache, dan dukungan latar belakang.
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 30
config.requestCachePolicy = .reloadIgnoringLocalCacheData
let session = URLSession(configuration: config)Byte Asinkron untuk Streaming
Gunakan bytes(from:) untuk mengalirkan data respons baris demi baris tanpa menyangga seluruh respons.
let (stream, _) = try await URLSession.shared.bytes(from: url)
for try await line in stream.lines {
print(line)
}Pengujian dengan URLProtocol
Buat tiruan respons jaringan dalam pengujian dengan membuat subkelas URLProtocol dan memasukkannya ke konfigurasi sesi khusus.
class MockURLProtocol: URLProtocol {
static var requestHandler: ((URLRequest) throws -> (HTTPURLResponse, Data))?
// override canInit, startLoading, stopLoading
}Pemeriksaan Cepat
Metode URLSession asinkron mana yang mengunduh respons URL langsung ke berkas sementara di disk?
Ringkasan Pelajaran
Gunakan URLSession.shared.data(from:) untuk permintaan GET asinkron, data(for:) dengan URLRequest khusus untuk POST/PUT, download(from:) untuk unduhan berkas, dan bytes(from:) untuk streaming. Selalu periksa kode status HTTP sebelum melakukan dekode.
Belajar Swift dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Pertanyaan yang Sering Diajukan
Apakah pelajaran “URLSession data(from:) dengan async/await” gratis?
Ya — teks lengkap “URLSession data(from:) dengan async/await” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “URLSession data(from:) dengan async/await”?
Mengambil data secara asinkron dari API REST menggunakan API URLSession modern. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “URLSession data(from:) dengan async/await” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- URLSession data(from:) dengan async/await
- Codable: Menyandikan dan Menguraikan JSON
- Penanganan Error dan Kode Status HTTP
- Logika Percobaan Ulang dan URLSession Latar Belakang