Sobes.tech
Junior

Swift-də səhvləri necə tapmaq olar?

sobes.tech Süni İntellekt

AI-dan cavab

Swift-də səhvlər throw, throws, trydo-catch bloklarından istifadə etməklə idarə olunur.

  1. Səhvlər ata bilən funksiyaların elan olunması: Funksiya parametrlərindən sonra throws aç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)"
    }
    
  2. Səhvlər ata bilən funksiyaları çağırmaq: try aç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)")
    }
    
  3. Fərqli səhv tiplərini tutmaq: catch blokunda 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)")
    }
    
  4. defer bloku: 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)")
    }
    
  5. Seçimli try?: Seçimli dəyər qaytarır. Əgər funksiya səhv atarsa, try? nil qaytarı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
    
  6. 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.