Penanganan Error dan Kode Status HTTP
Memeriksa kode status respons dan memetakan error menjadi error domain bertipe.
Penanganan Error dan Kode Status HTTP adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Rentang Status HTTP
Respons HTTP menunjukkan keberhasilan atau kegagalan melalui kode status: 2xx berhasil, 3xx pengalihan, 4xx kesalahan klien, dan 5xx kesalahan server.
// 200 OK, 201 Created
// 400 Bad Request, 401 Unauthorized, 404 Not Found
// 500 Internal Server ErrorMemeriksa Status di Swift
Konversikan URLResponse ke HTTPURLResponse, lalu periksa statusCode setelah permintaan asinkron.
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse else {
throw NetworkError.invalidResponse
}
guard (200..<300).contains(http.statusCode) else {
throw NetworkError.httpError(http.statusCode)
}Kesalahan Jaringan Bertipe
Definisikan enum kesalahan bertipe untuk kegagalan jaringan agar blok catch dapat menangani semua kemungkinan secara menyeluruh.
enum NetworkError: Error {
case invalidURL
case invalidResponse
case httpError(Int)
case decodingError(Error)
case noData
}Memetakan Kode Status ke Kesalahan
Gunakan switch pada kode status untuk menghasilkan kesalahan domain yang bermakna, bukan bilangan bulat mentah.
switch http.statusCode {
case 200..<300: break // success
case 401: throw NetworkError.unauthorized
case 404: throw NetworkError.notFound
case 500..<600: throw NetworkError.serverError(http.statusCode)
default: throw NetworkError.httpError(http.statusCode)
}Mendekode Respons Kesalahan
Saat status menunjukkan kesalahan, isi respons sering kali berisi pesan kesalahan JSON. Dekode pesan tersebut untuk mendapatkan diagnosis yang lebih baik.
if http.statusCode != 200 {
struct APIError: Decodable { var message: String }
let apiError = try? JSONDecoder().decode(APIError.self, from: data)
throw NetworkError.serverMessage(apiError?.message ?? "Unknown error")
}Meneruskan Kesalahan dalam async
Konkruensi terstruktur Swift meneruskan kesalahan secara alami: kesalahan yang dilemparkan akan membatalkan tugas saudara dalam TaskGroup.
async let users = fetchUsers()
async let posts = fetchPosts()
let (u, p) = try await (users, posts) // if either throws, both cancelMenangkap Kesalahan Tertentu
Gunakan blok catch bertipe untuk menangani setiap jenis kesalahan secara berbeda dalam kode pemanggil.
do {
let items = try await fetchItems()
} catch NetworkError.unauthorized {
showLoginScreen()
} catch NetworkError.httpError(let code) {
print("HTTP Error: \(code)")
} catch {
print("Unexpected: \(error)")
}Kode URLError
URLError menjelaskan kegagalan konektivitas: .notConnectedToInternet, .timedOut, dan .cannotFindHost.
do {
let (data, _) = try await URLSession.shared.data(from: url)
} catch let urlError as URLError where urlError.code == .notConnectedToInternet {
print("No internet connection")
}Pembungkus Result untuk Jaringan
Kembalikan Result dari fungsi pengambilan data jika Anda ingin pemanggil menangani kesalahan tanpa try/catch.
func fetchUser() async -> Result<User, NetworkError> {
do {
let user = try await performFetch()
return .success(user)
} catch let e as NetworkError {
return .failure(e)
} catch {
return .failure(.unknown)
}
}Pencatatan Kesalahan
Catat kesalahan jaringan beserta konteks yang relevan (URL, kode status, isi respons) untuk membantu proses debug di lingkungan produksi.
func log(_ error: NetworkError, url: URL) {
print("[Network] \(url.absoluteString) → \(error)")
}Pesan Kesalahan untuk Pengguna
Petakan kesalahan teknis ke teks yang mudah dipahami pengguna. Jangan pernah menampilkan kode status HTTP mentah di antarmuka.
extension NetworkError: LocalizedError {
var errorDescription: String? {
switch self {
case .unauthorized: return "Please log in again."
case .notFound: return "The requested item was not found."
case .serverError: return "Server error. Please try again later."
default: return "Something went wrong."
}
}
}Pemeriksaan Singkat
Rentang kode status HTTP mana yang menunjukkan respons berhasil?
Rangkuman Pelajaran
Setelah URLSession.data(from:), konversikan ke HTTPURLResponse dan periksa statusCode. Petakan kode ke kasus Error bertipe. Gunakan URLError untuk kegagalan konektivitas. Teruskan kesalahan dengan try/throw, lalu tangkap dengan blok catch bertipe.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penanganan Error dan Kode Status HTTP” gratis?
Ya — teks lengkap “Penanganan Error dan Kode Status HTTP” 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 “Penanganan Error dan Kode Status HTTP”?
Memeriksa kode status respons dan memetakan error menjadi error domain bertipe. 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 3 dari 4.
Berapa lama pelajaran “Penanganan Error dan Kode Status HTTP” 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