Operator Penanganan Kesalahan
Pulihkan dari kesalahan dengan catch, retry, dan replaceError.
Operator Penanganan Kesalahan 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.
Kesalahan dalam Combine
Publisher Combine memiliki tipe Kegagalan. Saat sebuah publisher gagal, aliran tersebut berakhir—tidak ada nilai lain yang dipancarkan. Untuk membangun alur pemrosesan yang tangguh, Anda memerlukan operator yang dapat menangani, mengubah, atau memulihkan diri dari kesalahan.
Tipe Kegagalan
Setiap publisher menyatakan Output dan Failure. Alur pemrosesan hanya dapat dikompilasi saat tipe kesalahan selaras, sehingga operator yang mengubah kegagalan sering digunakan.
let publisher: AnyPublisher<Data, URLError> = apiClient.request()
// Output = Data, Failure = URLErrorMenangkap Kesalahan
Penangkap mencegat kegagalan dan mengganti publisher yang gagal dengan publisher baru. Dengan begitu, Anda dapat memberikan nilai pengganti saat terjadi masalah.
apiClient.fetchUser()
.catch { error in
Just(User.guest)
}
.sink { user in
print("Got", user.name)
}
.store(in: &cancellables)replaceError
replaceError(with:) adalah bentuk catch yang lebih sederhana: operator ini mengganti kegagalan apa pun dengan satu nilai pengganti lalu selesai dengan sukses.
apiClient.fetchCount()
.replaceError(with: 0)
.sink { count in
self.badge.text = "\(count)"
}
.store(in: &cancellables)retry
retry(n) berlangganan ulang ke bagian hulu hingga n kali saat terjadi kegagalan. Operator ini ideal untuk kesalahan jaringan yang bersifat sementara.
apiClient.fetchData()
.retry(3)
.sink(receiveCompletion: { print($0) },
receiveValue: { print($0) })
.store(in: &cancellables)Menggabungkan retry dan penanganan kesalahan
Pola tangguh yang umum: lakukan retry beberapa kali, lalu gunakan catch sebagai cadangan jika semua percobaan gagal.
apiClient.fetchData()
.retry(2)
.catch { _ in
Just(Data())
}
.sink { data in
self.process(data)
}
.store(in: &cancellables)mapError
mapError mengubah satu jenis kesalahan menjadi jenis lainnya. Ini penting untuk menyatukan berbagai kegagalan dari sumber hulu menjadi satu jenis kesalahan tingkat aplikasi.
enum AppError: Error { case network }
apiClient.request()
.mapError { _ in AppError.network }
.sink(receiveCompletion: { _ in }, receiveValue: { _ in })
.store(in: &cancellables)Mengapa mapError Penting
Saat Anda menggabungkan penerbit, jenis Failure-nya harus cocok. mapError menormalkan kesalahan yang tidak cocok agar operator seperti merge dan zip dapat dikompilasi, serta sink Anda menangani satu jenis kesalahan.
setFailureType
Beberapa penerbit, seperti Just, memiliki jenis kegagalan Never. setFailureType(to:) menjembatani keduanya agar dapat digabungkan dengan penerbit yang dapat gagal.
Just(42)
.setFailureType(to: AppError.self)
.merge(with: failablePublisher)
.sink(receiveCompletion: { _ in }, receiveValue: { _ in })
.store(in: &cancellables)Menangani Penyelesaian
Dalam sink, penutupan penyelesaian memberi tahu Anda apakah aliran telah selesai atau gagal. Periksa penutupan tersebut untuk merespons kesalahan yang tidak dipulihkan di sumber hulu.
publisher.sink(
receiveCompletion: { completion in
if case .failure(let error) = completion {
self.showAlert(error)
}
},
receiveValue: { value in
self.update(value)
}
).store(in: &cancellables)Merancang Alur Pemrosesan yang Tangguh
Praktik terbaik untuk menangani kesalahan:
- Gunakan retry untuk kegagalan sementara
- Gunakan catch atau replaceError sebagai cadangan
- Gunakan mapError untuk menyatukan jenis kesalahan
- Selalu tangani kasus kegagalan dalam
sink
Pemeriksaan Singkat
Uji pengetahuan Anda tentang penanganan kesalahan.
Ringkasan
Anda telah mempelajari operator Combine untuk menangani kesalahan:
- catch / replaceError — menyediakan cadangan
- retry — mencoba kembali saat terjadi kegagalan
- mapError / setFailureType — menyatukan jenis kesalahan
Bersama-sama, operator tersebut memungkinkan Anda membangun alur pemrosesan yang tetap berfungsi dengan baik saat terjadi gangguan, alih-alih berhenti pada kesalahan pertama.
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 “Operator Penanganan Kesalahan” gratis?
Ya — teks lengkap “Operator Penanganan Kesalahan” 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 “Operator Penanganan Kesalahan”?
Pulihkan dari kesalahan dengan catch, retry, dan replaceError. 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 “Operator Penanganan Kesalahan” 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
- Mentransformasi dan Menggabungkan Aliran
- Penjadwal dan Threading
- Operator Penanganan Kesalahan
- Publisher dan Subscriber Kustom