Ինչպես հայտնաբերել սխալները 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).