Swift menyediakan dukungan bawaan untuk menampilkan dan menangkap error yang dapat dipulihkan saat
runtime. Misalnya, jika operasi dalam kode Anda gagal atau tidak valid, API akan menampilkan error HomeError. Hal ini menyederhanakan dan mengefisienkan penanganan error
dengan memungkinkan Anda berfokus hanya pada error yang dapat dipulihkan. Kemudian, Anda dapat memberikan
opsi, seperti mengizinkan pengguna mencoba lagi atau menampilkan pesan seperti
"Struktur tidak ditemukan". Dan karena Anda tidak perlu menangani setiap kemungkinan pengecualian secara eksplisit, kode Anda tidak terlalu berantakan dan akibatnya, tetap lebih fokus pada tujuan utamanya.
Contoh cara menangani kegagalan yang dapat dipulihkan:
let light1 = lightDevices.first
if let light = light1 {
do {
try await structure.move(device: light, to: room)
} catch let error as HomeError {
// Code for handling the exception
}
Tabel berikut memberikan arti kode HomeError yang mungkin Anda temui:
| Kode | Arti |
|---|---|
aborted |
Operasi dibatalkan. Hal ini biasanya muncul saat ada masalah konkurensi seperti kegagalan pemeriksaan urutan atau pembatalan transaksi. |
alreadyExists |
Resource atau entity yang Anda coba buat sudah ada. Misalnya, ini bisa berupa jadwal bernama untuk termostat. |
cancelled |
Operasi dibatalkan, biasanya oleh pemanggil. |
dataLoss |
Data hilang atau rusak yang tidak dapat dipulihkan. |
deadlineExceeded |
Batas waktu berakhir sebelum operasi selesai. Untuk operasi yang mengubah keadaan sistem, error ini mungkin ditampilkan, bahkan jika, operasi tersebut telah selesai. Sebagai contoh, respons berhasil dari suatu server dapat tertunda selama waktu yang cukup lama hingga tenggat waktu berakhir. |
failedPrecondition |
Operasi tersebut ditolak karena sistem tidak dalam keadaan dibutuhkan untuk menjalankan operasi. Misalnya, Anda mungkin mendapatkan
pesan ini jika memanggil
stop
pada oven yang sudah berhenti. |
internal |
Error internal. Artinya beberapa invarian yang diperlukan oleh sistem pokok telah rusak. Kode error ini disediakan untuk error yang bersifat serius. |
invalidArgument |
Klien menentukan argumen yang tidak valid. Perhatikan bahwa ini berbeda dengan `failedPrecondition`. `invalidArgument` menunjukkan argumen yang bermasalah, terlepas dari status sistem (misalnya, nama file yang salah format). |
notFound |
Anda menentukan entitas atau resource yang tidak dapat ditemukan. Misalnya, menentukan ID trek yang tidak ada saat memanggil
play di perangkat pemutar media. |
outOfRange |
Parameter melebihi rentang yang valid, berdasarkan status sistem saat ini. Pesan ini muncul jika nilai berada dalam rentang nilai yang berpotensi diterima oleh panggilan API, tetapi tidak masuk akal dalam konteks saat ini. |
permissionDenied |
Anda tidak memiliki izin untuk menjalankan operasi yang ditentukan. Kode error ini tidak boleh ditafsirkan bahwa permintaan tersebut valid. |
resourceExhausted |
Beberapa resource telah habis. Misalnya, error ini dapat ditampilkan
saat seseorang memanggil
dispense(item:amount:unit:presetName:) di perangkat dispenser makanan hewan peliharaan
dan tidak ada lagi makanan yang tersisa di unit.Hal ini juga dapat disebabkan oleh terlampauinya kuota project Home API. Untuk mengetahui informasi selengkapnya, lihat Pengelolaan kuota. |
unauthenticated |
Pemanggil tidak dapat diidentifikasi atau permintaan tidak memiliki kredensial autentikasi yang valid. |
unavailable |
Layanan tidak tersedia. Kemungkinan besar ini hanya kondisi sementara, yang dapat diperbaiki dengan mencoba kembali menggunakan backoff. Perlu diketahui bahwa mencoba kembali operasi non-idempoten tidak selalu aman. |
unimplemented |
Operasi yang diminta tidak diterapkan, didukung, atau diaktifkan di layanan ini. |
unknown |
Error tidak diketahui. Secara umum, unknown muncul
saat terjadi kondisi error yang tidak dapat diklasifikasikan menggunakan
kode error lainnya. Misalnya, error ini dapat ditampilkan jika nilai status yang diterima dari API eksternal tidak memiliki informasi yang memadai terkait penyebab utamanya. |