Swiftте каталарды кантип аныктоо керек?
sobes.tech AI
AIден жооп
Swiftте каталар throw, throws, try жана do-catch блокторуна негизделген каталардын иштетүү системеси аркылуу кармалат.
-
Каталарды ыргыта турган функцияларды жарыялоо: Функциянын параметрлеринен кийин
throwsачкыч сөзү колдонулат.enum DataError: Error { case emptyData case invalidFormat } func processData(input: String) throws -> String { guard !input.isEmpty else { throw DataError.emptyData // Катаны ыргытабыз } // ... маалыматтарды иштетүү логикасы ... if input == "invalid" { throw DataError.invalidFormat } return "Иштетилди: \(input)" } -
Каталарды ыргыта турган функцияларды чакыруу:
tryачкыч сөзү колдонулат.do { // Каталарды иштетүү блогу let result = try processData(input: "valid data") print(result) // "Иштетилди: valid data" } catch { // Каталарды кармоо print("Каталар пайда болду: \(error)") } -
Конкреттүү каталардын түрлөрүн кармоо:
catchблокунда так катанын түрү көрсөтүлүшү мүмкүн.do { let result = try processData(input: "") print(result) } catch DataError.emptyData { print("Маалыматтар бош, киргизүүнү камсыз кылыңыз.") } catch DataError.invalidFormat { print("Маалыматтын форматы туура эмес.") } catch { // Башка бардык каталарды кармоо print("Күтүлбөгөн каталар: \(error)") } -
deferблогу: Актуалдуу чөйрөдөн чыгуу алдында аткарылат, каталар болобу же жокпу, маанилүү эмес. Ресурстарды тазалоо үчүн колдонулат.func openFile(_ filename: String) throws -> String { // Файлды ачып, анын мазмунун кайтарат деп эсептейбиз print("Файл ачылууда: \(filename)") // ... ачуу логикасы ... defer { // Бул код функциядан чыгуу алдында аткарылат, // каталар болсо да print("Файл жабылууда: \(filename)") } // ... файлды иштетүү ... if filename == "error.txt" { throw DataError.invalidFormat // Катаны ыргытабыз } return "Файлдын мазмуну" } do { let content = try openFile("data.txt") print(content) } catch { print("Файлды иштетүүдө каталар пайда болду: \(error)") } -
Опционалдуу
try?: Опционалдык маанини кайтарат. Эгер функция катаны ыргыта турган болсо,try?nilкайтарат.let processedResult = try? processData(input: "") // processedResult `nil` болот let validResult = try? processData(input: "abc") // validResult опционалдык String болуп, мааниси "Processed: abc" болот -
Мажбурлап
try!: Эгер сиз ишенсеңиз, каталар болбойт деп, колдонулат. Эгер болбосо, колдонмо катуу үзүлөт. Эскертүү менен колдонуу керек.// Функция катасыз иштейт деп 100% ишенсеңиз гана колдонуу керек let result = try! processData(input: "эч качан туура келген киргизүү")
do-catch негизделген система башка тилдердеги салттуу исключенияларга салыштырмалуу так жана коопсуз жол менен каталарды иштетүүнү камсыз кылат, анткени ал throws менен белгиленген функцияларды жана алардын чакырылышында (try, do-catch) ачык иштетүүнү талап кылат.