Cum să detectezi erorile în Swift?
sobes.tech AI
Răspuns de la AI
În Swift, erorile sunt capturate folosind un sistem de gestionare a erorilor bazat pe utilizarea cuvintelor cheie throw, throws, try și blocul do-catch.
-
Declarația funcțiilor care pot arunca erori: Se folosește cuvântul cheie
throwsdupă parametrii funcției.enum DataError: Error { case emptyData case invalidFormat } func processData(input: String) throws -> String { guard !input.isEmpty else { throw DataError.emptyData // Aruncă o eroare } // ...logica de procesare a datelor... if input == "invalid" { throw DataError.invalidFormat } return "Procesat: \(input)" } -
Apelarea funcțiilor care pot arunca erori: Se folosește cuvântul cheie
try.do { // Bloc de gestionare a erorilor let result = try processData(input: "date valide") print(result) // "Procesat: date valide" } catch { // Bloc de captare a erorilor print("A apărut o eroare: \(error)") } -
Captarea tipurilor specifice de erori: În blocul
catchse poate indica un tip specific de eroare pentru captare.do { let result = try processData(input: "") print(result) } catch DataError.emptyData { print("Datele sunt goale, vă rugăm să furnizați o intrare.") } catch DataError.invalidFormat { print("Formatul datelor este invalid.") } catch { // Captarea oricăror alte erori print("A apărut o eroare neașteptată: \(error)") } -
Blocul
defer: Se execută imediat înainte de a ieși din scopul curent, indiferent dacă a avut loc o eroare sau nu. Este adesea folosit pentru eliberarea resurselor.func openFile(_ filename: String) throws -> String { // Presupunem că deschide un fișier și returnează conținutul său print("Deschidere fișier \(filename)") // ... logica de deschidere ... defer { // Acest cod va fi executat înainte de a ieși din funcție, // chiar dacă apare o eroare print("Închiderea fișierului \(filename)") } // ... procesarea fișierului ... if filename == "error.txt" { throw DataError.invalidFormat // Aruncă o eroare } return "Conținutul fișierului" } do { let content = try openFile("data.txt") print(content) } catch { print("Eroare la gestionarea fișierului: \(error)") } -
try?opțional: Returnează o valoare opțională. Dacă funcția aruncă o eroare,try?returneazănil.let processedResult = try? processData(input: "") // processedResult va fi nil let validResult = try? processData(input: "abc") // validResult va fi un String opțional cu valoarea "Processed: abc" -
try!forțat: Se folosește atunci când ești sigur că nu va apărea o eroare. Dacă totuși apare, aplicația se va încheia brusc. Folosește cu precauție.// Folosește doar dacă ești 100% sigur că funcția nu va arunca o eroare let result = try! processData(input: "întotdeauna intrare validă")
Sistemul bazat pe do-catch este o modalitate mai explicită și mai sigură de a trata erorile comparativ cu excepțiile tradiționale din alte limbaje, deoarece necesită declararea explicită a funcțiilor care pot arunca erori (throws) și tratarea explicită a acestor erori la apel (try, do-catch).