Swift, çalışma zamanında kurtarılabilir hataları oluşturmak ve yakalamak için yerleşik destek sağlar. Örneğin, kodunuzdaki bir işlem başarısız olursa veya geçerli değilse API, HomeError hatası verir. Bu sayede, yalnızca kurtarılabilir hatalara odaklanarak hata işleme sürecini basitleştirebilir ve kolaylaştırabilirsiniz. Ardından, kullanıcının tekrar denemesine izin verme veya "Yapı bulunamadı" gibi bir mesaj gösterme gibi seçenekler sunabilirsiniz. Ayrıca, olası her istisnayı açıkça ele almanız gerekmediğinden kodunuz daha az karmaşık olur ve dolayısıyla asıl amacına daha fazla odaklanır.
Kurtarılabilir bir hatanın nasıl ele alınabileceğine dair bir örnek:
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
}
Aşağıdaki tabloda, karşılaşabileceğiniz HomeError kodlarının anlamları verilmiştir:
| Kod | Anlamı |
|---|---|
aborted |
İşlem iptal edildi. Bu durum genellikle sıra kontrolü hatası veya işlem iptali gibi bir eşzamanlılık sorunu olduğunda ortaya çıkar. |
alreadyExists |
Oluşturmaya çalıştığınız kaynak veya varlık zaten mevcut. Örneğin, bir termostat için adlandırılmış bir program olabilir. |
cancelled |
İşlem, genellikle arayan tarafından iptal edildi. |
dataLoss |
Kurtarılamayan veri kaybı veya bozulması |
deadlineExceeded |
İşlem tamamlanmadan önce son tarih geçti. Sistemin durumunu değiştiren işlemler için işlem başarıyla tamamlanmış olsa bile bu hata döndürülebilir. Örneğin, bir sunucudan gelen başarılı bir yanıt, son tarihin dolmasına yetecek kadar gecikmiş olabilir. |
failedPrecondition |
Sistem, işlemin yürütülmesi için gereken durumda olmadığından işlem reddedildi. Örneğin, durdurulmuş bir fırında
stop
komutunu çağırırsanız bu mesajı alabilirsiniz. |
internal |
Dahili hatalar. Bu, temel sistem tarafından beklenen bazı sabitlerin bozulduğu anlamına gelir. Bu hata kodu ciddi hatalar için ayrılmıştır. |
invalidArgument |
İstemci geçersiz bir bağımsız değişken belirtti. Bu durumun `failedPrecondition`dan farklı olduğunu unutmayın. `invalidArgument`, sistemin durumundan bağımsız olarak sorunlu olan bağımsız değişkenleri (ör. hatalı biçimlendirilmiş bir dosya adı) gösterir. |
notFound |
Bulunamayan bir varlık veya kaynak belirttiniz. Örneğin, bir medya oynatıcı cihazda
play çağrısı yaparken mevcut olmayan bir parça kimliği belirtmek. |
outOfRange |
Bir parametre, mevcut sistem durumuna göre geçerli aralığı aştı. Bu mesaj, değer API çağrısının kabul edebileceği değer aralığında olduğunda ancak mevcut bağlamda anlamlı olmadığında gösterilir. |
permissionDenied |
Belirtilen işlemi yürütme izniniz yok. Bu hata kodu, isteğin başka bir açıdan geçerli olduğu şeklinde yorumlanmamalıdır. |
resourceExhausted |
Bazı kaynaklar tükendi. Örneğin, bir evcil hayvan mama kabı cihazında
dispense(item:amount:unit:presetName:) çağrıldığında ve ünitede mama kalmadığında bu hata verilebilir.Bu durum, Home API'leri proje kotasının aşılmasından da kaynaklanabilir. Daha fazla bilgi için Kota yönetimi başlıklı makaleyi inceleyin. |
unauthenticated |
Arayan tanımlanamıyor veya istekte geçerli kimlik doğrulama bilgileri yok. |
unavailable |
Hizmet kullanılamıyor. Bu durum büyük olasılıkla geçicidir ve bekleme süresiyle yeniden deneme yapılarak düzeltilebilir. Eş kuvvetli olmayan işlemleri yeniden denemenin her zaman güvenli olmadığını unutmayın. |
unimplemented |
İstenen işlem bu hizmette uygulanmıyor, desteklenmiyor veya etkinleştirilmiyor. |
unknown |
Bilinmeyen hata. Genel olarak, diğer hata kodlarından herhangi biri kullanılarak sınıflandırılamayan bir hata koşulu oluştuğunda unknown görünür. Örneğin, harici bir API'den alınan durum değeri, temel neden hakkında yeterli bilgi içermediğinde bu hata döndürülebilir. |