Swift Notları — 3 Error Handling
Birçok programlama dilinde olduğu gibi Swift dilinde de hata yakalama oldukça önemli bir yere sahip. Swift dilinde fonksiyonlarımızı “throw” keyworduyle kapsülleyip kullanım sırasında “try” anahtar kelimesinin kullanımını zorunlu hale getirebiliriz. Bir başka deyişle “bu fonksyion içerisinde bir throw mevcut. Try bloğu kullanmak zorundasın!” diyebiliriz. Böylelikle development esnasında fonksiyonlarımızı kontrol etmemiz mümkün.
Dilin kendi Error yapıları olduğu gibi siz de belirli syntaxlara uyarak errorlar oluşturabilirsiniz. Örneğin aşağıdaki kod bloğunda validation yerine geçen bir error enum oluşturdum.
Login isimli bir fonsiyon oluşturup burada dayukarıda tanımladığım LoginError enum yapısını kullanıyorum.
Bir fonksiyonun error fırlatabilmesi için “throws” anahtar kelimesine sahip olması gerekli.
Throws anahtar kelimesini kaldırdığım takdirde aşağıdaki hatayı alıyorum.
Sıra geldi bu fonksiyonun kullanımındaki hataları yakalamaya. Öncelikle bu fonksiyonu olduğu gibi kullanmak istediğimizde Swift dili bize bazı hatalar bildiriyor. Bunun nedeni throws anahtar kelimesinin deklare edildiği fonksiyonun olduğu gibi kullanılamaması.
Yukarıda aldığımız hatayı kimi yollarla aşabiliriz. Örneğin aşağıdaki gibi sadece bir try anahtar kelimesi kullandığımızda ve kodumuzu çalıştırdığımızda -haliyle- hataya takılıyoruz. ( email i boş gönderdiğimiz için.)
Swift dili alternatif olarak bir çözüm daha sunmakta. Eğer fonksiyon bir hata fırlatırsa loginResult değerini nil olarak almamız ve kodun devamının çalışmasını sağlamamız mümkün.
Son olarak “!” ile force kullanarak kodu çalıştırabiliriz. Ama bu durumda da hata alacağımız için kodumuz yarıda kesilecektir.
Çözüm
Her ne kadar throws kelimesiyle deklare ettiğimiz fonksiyonu “?” keyworduyle çalıştırabilir hale getirsek de birçok durumda bu hatayı yakalamak ve ona göre bir işlem yapmak isteriz. Bu fonksiyonlar için Swift do-try-cath kelimelerinden oluşan bir yapıyı bize sunmakta.
Do bloğu içerisinde throws la belirtilen ( veya belirtilmeyen ) fonksiyonlarımızı yazıyoruz. Bir hata olması durumda da catch bloğunda yakalıyoruz. Hangi hataya göre ne işlem yapmamız gerektiğini de ayrı catch bloklarında belirtmemiz mümkün.
Belirttiğimiz hiç bir hataya düşmezse en sondaki default catch bloğunda hatayı yakalayabiliriz.
Olabildiğince az hatayla yazmamız ve catchlere düşmememiz dileğiyle. Bir sonraki Swift notunda görüşmek üzere :)