Swift-də səhvləri necə tapmaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
Swift-də səhvlər throw, throws, try və do-catch bloklarından istifadə etməklə idarə olunur.
-
Səhvlər ata bilən funksiyaların elan olunması: Funksiya parametrlərindən sonra
throwsaçar sözü istifadə olunur.enum DataError: Error { case emptyData case invalidFormat } func processData(input: String) throws -> String { guard !input.isEmpty else { throw DataError.emptyData // Səhv atılır } // ... məlumatların işlənməsi loqikası... if input == "invalid" { throw DataError.invalidFormat } return "Emal edildi: \(input)" } -
Səhvlər ata bilən funksiyaları çağırmaq:
tryaçar sözü istifadə olunur.do { // Səhvləri idarə etmək üçün blok let result = try processData(input: "valid data") print(result) // "Emal edildi: valid data" } catch { // Səhvləri tutmaq üçün blok print("Xəta baş verdi: \(error)") } -
Fərqli səhv tiplərini tutmaq:
catchblokunda konkret səhv tipi göstərilə bilər.do { let result = try processData(input: "") print(result) } catch DataError.emptyData { print("Məlumat boşdur, zəhmət olmasa giriş verin.") } catch DataError.invalidFormat { print("Məlumat formatı yanlışdır.") } catch { // Digər bütün səhvləri tutmaq print("Gözlənilməz xəta baş verdi: \(error)") } -
deferbloku: Cari sahədən çıxışdan əvvəl, səhv olub-olmamasından asılı olmayaraq, icra olunur. Resursların təmizlənməsi üçün istifadə olunur.func openFile(_ filename: String) throws -> String { // Faylı açır və onun məzmununu qaytarır print("Fayl açılır: \(filename)") // ... açma loqikası... defer { // Bu kod funksiyadan çıxışdan əvvəl icra olunacaq, // hətta xəta olsa belə print("Fayl bağlanır: \(filename)") } // ... faylın işlənməsi... if filename == "error.txt" { throw DataError.invalidFormat // Səhv atılır } return "Fayl məzmunu" } do { let content = try openFile("data.txt") print(content) } catch { print("Fayl ilə bağlı xəta: \(error)") } -
Seçimli
try?: Seçimli dəyər qaytarır. Əgər funksiya səhv atarsa,try?nilqaytarır.let processedResult = try? processData(input: "") // processedResult `nil` olacaq let validResult = try? processData(input: "abc") // validResult `Processed: abc` dəyəri olan opsional String olacaq -
Zorunlu
try!: Əmin olunduqda istifadə olunur, səhv baş verərsə, tətbiq çökmə ilə nəticələnər. Diqqətlə istifadə edin.// Yalnız funksiyanın səhv etməyəcəyinə tam əminsinizsə istifadə edin let result = try! processData(input: "həmişə düzgün giriş")
do-catch əsaslı sistem, digər dillərdəki ənənəvi istisnalarla müqayisədə daha aydın və təhlükəsiz səhv idarəetmə üsuludur, çünki bu, səhvlər ata bilən funksiyaların (throws) və bu səhvlərin çağırış zamanı (try, do-catch) açıq elanını tələb edir.