iOS'te hata işleme

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:

Tablo: HomeError kodlar
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.