Swift, çalışma zamanında kurtarılabilir hataları oluşturma ve yakalama için yerleşik destek sağlar. Örneğin, kodunuzdaki bir işlem başarısız olursa veya geçerli olmazsa API, HomeError
hatası verir. Bu sayede yalnızca kurtarılabilir hatalara odaklanarak hata işlemeyi basitleştirebilir ve kolaylaştırabilirsiniz. Ardından, kullanıcıya tekrar deneme izni verme veya "Yapı bulunamadı" gibi bir mesaj gösterme seçenekleri 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 ö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 hata genellikle sıra kontrolü hatası veya işlem iptali gibi eşzamanlılık sorunu olduğunda gösterilir. |
alreadyExists |
Oluşturmaya çalıştığınız kaynak veya öğe zaten mevcut. Örneğin, bu bir termostat için adlandırılmış bir program olabilir. |
cancelled |
İşlem, genellikle arayan tarafından iptal edildi. |
dataLoss |
Kurtarılamaz veri kaybı veya bozulması. |
deadlineExceeded |
İşlem tamamlanmadan son tarih geçti. Sistemin durumunu değiştiren işlemler için bu hata, işlem başarıyla tamamlanmış olsa bile döndürülebilir. Örneğin, bir sunucudan gelen başarılı yanıt, son tarihin geçmesine yetecek kadar uzun süre gecikmiş olabilir. |
failedPrecondition |
Sistem, işlemin yürütülmesi için gerekli durumda olmadığından işlem reddedildi. Örneğin, durdurulmuş bir fırında stop 'ı ararsanız bu mesajı alabilirsiniz. |
internal |
Dahili hatalar. Bu, temel sistemin beklediği bazı değişmezlerin bozulduğu anlamına gelir. Bu hata kodu ciddi hatalar için ayrılmıştır. |
invalidArgument |
İstemci, geçersiz bağımsız değişken belirtti. Bunun `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ı) belirtir. |
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 belirtme. |
outOfRange |
Bir parametre, mevcut sistem durumuna göre geçerli aralığı aştı. Bu mesaj, değerin API çağrısının kabul edebileceği değer aralığında olması ancak mevcut bağlamda anlamlı olmaması durumunda gösterilir. |
permissionDenied |
Belirtilen işlemi yürütme izniniz yok. Bu hata kodu, isteğin başka bir şekilde geçerli olduğu anlamına gelmemelidir. |
resourceExhausted |
Bazı kaynaklar tükendi. Örneğin, evcil hayvan besleme cihazında
dispense(item:amount:unit:presetName:) çağrısı yapıldığında ve birimde yiyecek kalmadığında bu hata verilebilir. |
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 geri çekilme ile yeniden denenerek düzeltilebilir. İdempotent 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, unknown , diğer hata kodlarından hiçbiri kullanılarak sınıflandırılamayan bir hata durumu oluştuğunda gösterilir. Örneğin, bu hata, temel neden hakkında yeterli bilgiye sahip olmayan bir harici API'den alınan bir durum değeri olduğunda döndürülebilir. |