Swift'te hataları nasıl yakalarsınız?
sobes.tech yapay zeka
AI'dan gelen yanıt
Swift'te hatalar, throw, throws, try anahtar kelimeleri ve do-catch bloğu kullanılarak yapılan hata işleme sistemiyle yakalanır.
-
Hata atabilecek fonksiyonların bildirimi: Fonksiyon parametrelerinden sonra
throwsanahtar kelimesi kullanılır.enum DataError: Error { case emptyData case invalidFormat } func processData(input: String) throws -> String { guard !input.isEmpty else { throw DataError.emptyData // Hata atılır } // ...veri işleme mantığı... if input == "invalid" { throw DataError.invalidFormat } return "İşlenmiş: \(input)" } -
Hata atabilecek fonksiyonları çağırma:
tryanahtar kelimesi kullanılır.do { // Hata işleme bloğu let result = try processData(input: "geçerli veri") print(result) // "İşlenmiş: geçerli veri" } catch { // Hataları yakalama bloğu print("Bir hata oluştu: \(error)") } -
Belirli hata türlerini yakalama:
catchbloğunda belirli hata türleri belirtilebilir.do { let result = try processData(input: "") print(result) } catch DataError.emptyData { print("Veri boş, lütfen giriş yapın.") } catch DataError.invalidFormat { print("Veri formatı geçersiz.") } catch { // Diğer tüm hataları yakala print("Beklenmedik bir hata oluştu: \(error)") } -
deferbloğu: Bu blok, mevcut kapsamdan çıkmadan hemen önce çalıştırılır, hata olup olmamasına bakılmaksızın. Kaynakları temizlemek için sıkça kullanılır.func openFile(_ filename: String) throws -> String { // Diyelim ki bu, bir dosyayı açar ve içeriğini döner print("Dosya \(filename) açılıyor") // ... açma mantığı... defer { // Bu kod, fonksiyondan çıkmadan önce çalışır, // hata olsa bile print("Dosya \(filename) kapatılıyor") } // ... dosya işlemleri ... if filename == "error.txt" { throw DataError.invalidFormat // Hata atılır } return "Dosya içeriği" } do { let content = try openFile("data.txt") print(content) } catch { print("Dosya işleme hatası: \(error)") } -
try?opsiyonel: Bu, opsiyonel bir değer döndürür. Eğer fonksiyon hata atarsa,try?nildöner.let processedResult = try? processData(input: "") // processedResult nil olacak let validResult = try? processData(input: "abc") // validResult, "Processed: abc" değerine sahip opsiyonel String olacak -
Zorunlu
try!: Bu, hatanın olmayacağından emin olduğunuz durumlarda kullanılır. Hata olursa, uygulama çökerek sona erer. Dikkatli kullanın.// Sadece fonksiyonun hata vermeyeceğinden %100 eminseniz kullanın let result = try! processData(input: "her zaman geçerli giriş")
do-catch tabanlı sistem, diğer dillerdeki geleneksel istisnalara kıyasla daha açık ve güvenli bir hata işleme yöntemidir, çünkü hata atabilecek fonksiyonların (throws) açıkça bildirilmesini ve bu hataların çağrılırken (try, do-catch) açıkça ele alınmasını gerektirir.