iOS'te hata işleme

Swift, çalışma zamanında kurtarılabilir hataları atma ve yakalama için yerleşik destek sağlar. Örneğin, kodunuzdaki bir işlem başarısız olursa veya geçerli değilse API bir HomeError hatası verir. Bu sayede, yalnızca kurtarılabilir hatalara odaklanabilirsiniz. Böylece hatalarla ilgili işlemleri basitleştirip kolaylaştırabilirsiniz. Ardından, kullanıcının tekrar denemesine izin verme veya "Yapı bulunamadı" gibi bir mesaj görüntüleme gibi seçenekler sunabilirsiniz. Olası her istisnayı açıkça ele almanız gerekmediğinden kodunuz daha düzenli olur ve dolayısıyla birincil amacına daha fazla odaklanır.

Kurtarılabilecek bir hatayı nasıl ele alacağınıza 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:

Tablo: HomeError kodları
Kod Anlamı
aborted İşlem iptal edildi. Bu durum genellikle sıra kontrolü hatası veya işlem iptal etme 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, 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 doldu. 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ı 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, zaten durdurulmuş bir fırında stop düğmesine bastığınızda bu mesajı alabilirsiniz.
internal Dahili hatalar. Bu, temel sistem tarafından beklenen bazı değişmez özelliklerin 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" değerinden farklı olduğunu unutmayın. "invalidArgument", sistemin durumundan bağımsız olarak sorunlu olan bağımsız değişkenleri (ör. hatalı biçimlendirilmiş dosya adı) gösterir.
notFound Bulunamayan bir öğe veya kaynak belirttiniz. Örneğin, bir medya oynatıcı cihazda play çağrısı yapılırken var olmayan bir parça kimliği belirtmek.
outOfRange Mevcut sistem durumuna göre bir parametre geçerli aralığı aştı. Bu mesaj, değer API çağrısının kabul edebileceği değer aralığında olduğu halde mevcut bağlamda anlamlı olmadığında gösterilir.
permissionDenied Belirtilen işlemi yürütme izniniz yok. Bu hata kodu, isteğin diğer açılardan geçerli olduğu anlamına gelmez.
resourceExhausted Bazı kaynaklar tükendi. Örneğin, bir evcil hayvan mama makinesi cihazında dispense(item:amount:unit:presetName:) çağrısı yapıldığında ve cihazda artık mama kalmadığında bu hata meydana gelebilir.
unauthenticated Arayan tanımlanamıyor veya istekte geçerli kimlik doğrulama kimlik bilgileri bulunmuyor.
unavailable Hizmet kullanılamıyor. Bu durum büyük olasılıkla geçicidir ve geri çekilmeyle yeniden deneyerek düzeltilebilir. Kimlik doğrulaması olmayan işlemlerin her zaman yeniden denenmesinin 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örünür. Örneğin, harici bir API'den alınan durum değeri temel nedenle ilgili yeterli bilgiyi içermiyorsa bu hata döndürülebilir.