Kuidas avastada vigu Swiftis?
sobes.tech AI
Vastus AI-lt
Swiftisüsteem viga püüdmise põhineb võtmesõnadel throw, throws, try ja do-catch plokil.
-
Funktsioonide, mis võivad vigu visata, deklaratsioon: Kasutatakse võtmesõna
throwspärast funktsiooni parameetreid.enum DataError: Error { case emptyData case invalidFormat } func processData(input: String) throws -> String { guard !input.isEmpty else { throw DataError.emptyData // Visatakse viga } // ... andmete töötlemise loogika ... if input == "invalid" { throw DataError.invalidFormat } return "Processed: \(input)" } -
Funktsioonide, mis võivad vigu visata, kutsumine: Kasutatakse võtmesõna
try.do { // Vigade töötlemise plokk let result = try processData(input: "valid data") print(result) // "Processed: valid data" } catch { // Vigade püüdmine print("An error occurred: \(error)") } -
Spetsiifiliste vigatüüpide püüdmine:
catchplokis saab määrata konkreetse vea tüübi.do { let result = try processData(input: "") print(result) } catch DataError.emptyData { print("Data is empty, please provide input.") } catch DataError.invalidFormat { print("Data format is invalid.") } catch { // Kõikide teiste vigade püüdmine print("An unexpected error occurred: \(error)") } -
deferplokk: Käivitatakse otse enne praegusest vahemikust väljumist, olenemata sellest, kas toimus erind või mitte. Sageli kasutatakse ressursside puhastamiseks.func openFile(_ filename: String) throws -> String { // Oletame, et see avab faili ja tagastab selle sisu print("Opening file \(filename)") // ... avamise loogika ... defer { // See kood käivitatakse enne funktsioonist väljumist, // isegi kui toimub viga print("Closing file \(filename)") } // ... faili töötlemine ... if filename == "error.txt" { throw DataError.invalidFormat // Visatakse viga } return "File content" } do { let content = try openFile("data.txt") print(content) } catch { print("Error handling file: \(error)") } -
Valikuline
try?: Tagastab valikulise väärtuse. Kui funktsioon viskab vea,try?tagastabnil.let processedResult = try? processData(input: "") // processedResult on nil let validResult = try? processData(input: "abc") // validResult on valikulise String väärtusega "Processed: abc" -
Sunni
try!: Kasutatakse, kui olete kindel, et viga ei toimu. Kui viga siiski toimub, lõpetab rakendus töö. Kasutage ettevaatusega.// Kasutage ainult, kui olete 100% kindel, et funktsioon ei viska viga let result = try! processData(input: "always valid input")
do-catch süsteemil põhinev viga töötlemise süsteem on selgem ja turvalisem kui traditsioonilised erandid teistes keeltes, kuna see nõuab funktsioonide selget deklaratsiooni, mis võivad vigu visata (throws), ning nende vigade selget töötlemist väljakutsel (try, do-catch).