Penanganan error di iOS

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 hanya berfokus pada error yang dapat dipulihkan. Kemudian, Anda dapat memberikan opsi, seperti mengizinkan pengguna mencoba lagi atau menampilkan pesan seperti "Struktur tidak ditemukan". Karena Anda tidak perlu menangani setiap pengecualian yang mungkin terjadi secara eksplisit, kode Anda menjadi lebih ringkas dan karenanya, tetap lebih berfokus 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:

Tabel: HomeError kode
Kode Arti
aborted Operasi dibatalkan. Hal ini biasanya muncul jika ada masalah konkurensi seperti kegagalan pemeriksaan urutan atau pembatalan transaksi.
alreadyExists Resource atau entity yang Anda coba buat sudah ada. Misalnya, 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 dapat diselesaikan. Untuk operasi yang mengubah keadaan sistem, error ini mungkin ditampilkan bahkan jika operasi tersebut telah selesai. Misalnya, respons yang berhasil dari server dapat tertunda cukup lama hingga batas waktu berakhir.
failedPrecondition Operasi ditolak karena sistem tidak dalam status yang diperlukan untuk eksekusi 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 dicadangkan untuk serious errors.
invalidArgument Klien menentukan argumen yang tidak valid. Perhatikan bahwa hal ini berbeda dengan `failedPrecondition`. `invalidArgument` menunjukkan argumen yang bermasalah, terlepas dari status sistem (misalnya, nama file yang salah format).
notFound Anda menentukan entity 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 saat 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 diartikan bahwa permintaan tersebut valid.
resourceExhausted Beberapa resource telah habis. Misalnya, hal ini dapat ditampilkan saat seseorang memanggil dispense(item:amount:unit:presetName:) di perangkat pengumpan hewan peliharaan dan tidak ada lagi makanan yang tersisa di unit.

Hal ini juga dapat disebabkan oleh melebihi kuota project Home APIs. 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 diimplementasikan, didukung, atau diaktifkan dalam layanan ini.
unknown Error tidak diketahui. Secara umum, unknown muncul saat kondisi error terjadi yang tidak dapat diklasifikasikan menggunakan kode error lainnya. Misalnya, error ini dapat ditampilkan saat nilai status diterima dari API eksternal yang tidak memiliki informasi yang cukup mengenai penyebab utamanya.