Jak odhalit chyby ve Swift?
sobes.tech AI
Odpověď od AI
V jazyce Swift jsou chyby zachycovány pomocí systému zpracování chyb založeného na klíčových slovech throw, throws, try a bloku do-catch.
-
Deklarace funkcí, které mohou vyhodit chybu: Používá se klíčové slovo
throwsza parametry funkce.enum DataError: Error { case emptyData case invalidFormat } func processData(input: String) throws -> String { guard !input.isEmpty else { throw DataError.emptyData // Vyhození chyby } // ... logika zpracování dat ... if input == "invalid" { throw DataError.invalidFormat } return "Zpracováno: \(input)" } -
Volání funkcí, které mohou vyhodit chybu: Používá se klíčové slovo
try.do { // Blok pro zpracování chyb let result = try processData(input: "valid data") print(result) // "Zpracováno: valid data" } catch { // Zachycení chyb print("Došlo k chybě: \(error)") } -
Zachycení konkrétních typů chyb: V bloku
catchlze uvést konkrétní typ chyby.do { let result = try processData(input: "") print(result) } catch DataError.emptyData { print("Data jsou prázdná, zadejte vstup.") } catch DataError.invalidFormat { print("Formát dat je neplatný.") } catch { // Zachycení všech ostatních chyb print("Nastala neočekávaná chyba: \(error)") } -
Blok
defer: Je vykonán těsně před opuštěním aktuálního rozsahu, bez ohledu na to, zda došlo k výjimce nebo ne. Často se používá k uvolnění zdrojů.func openFile(_ filename: String) throws -> String { // Předpokládáme, že otevře soubor a vrátí jeho obsah print("Otevírám soubor: \(filename)") // ... logika otevírání ... defer { // Tento kód se provede před opuštěním funkce, // i když dojde k chybě print("Zavírám soubor: \(filename)") } // ... zpracování souboru ... if filename == "error.txt" { throw DataError.invalidFormat // Vyhození chyby } return "Obsah souboru" } do { let content = try openFile("data.txt") print(content) } catch { print("Chyba při zpracování souboru: \(error)") } -
Volitelný
try?: Vrací volitelnou hodnotu. Pokud funkce vyhodí chybu,try?vrátínil.let processedResult = try? processData(input: "") // processedResult bude nil let validResult = try? processData(input: "abc") // validResult bude volitelný String s hodnotou "Processed: abc" -
Vynucený
try!: Používá se, když jste si jisti, že chyba nenastane. Pokud ano, aplikace se neočekávaně ukončí. Používejte opatrně.// Použijte pouze, pokud jste 100% jisti, že funkce nevyhodí chybu let result = try! processData(input: "vždy platný vstup")
Systém založený na do-catch je jasnější a bezpečnější způsob zpracování chyb ve srovnání s tradičními výjimkami v jiných jazycích, protože vyžaduje explicitní deklaraci funkcí, které mohou vyhodit chybu (throws), a jejich explicitní zpracování při volání (try, do-catch).