- Published on
Swiftda Error Handling
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Xato (exception) β bu dastur bajarilishi davomida kutilmagan hodisa. Masalan,
var numerator = 10 // surat
var denominator = 0 // maxraj
// sonni 0 ga bo'lishga urinish
var result = numerator / denominator // xato kod
Bu yerda sonni bo'lishga urinmoqdamiz. Shunday turdagi xato dasturning normal ishlashini to'xtatadi.
Swiftda xatolarni boshqarish qadamlari
- Xato turlarini ifodalovchi enum yaratish
throwskalit so'zi yordamida xato tashlash funksiyasini yaratishtrykalit so'zi yordamida funksiyani chaqirish- Kodni
do {...}bloki ichiga o'rash va barcha xatolarni boshqarish uchuncatch {...}blokini qo'shish
1. Xatolar Enumini yaratish
Swiftda dastur yozish jarayonida duch kelishimiz mumkin bo'lgan xato turlarini ifodalovchi enum yaratishimiz kerak.
Biz yaratgan enum Error protocoliga mos kelishi kerak, shunda funksiya ichida xato qiymatini tashlashimiz mumkin bo'ladi.
Keling, misolni ko'raylik:
enum DivisionError: Error {
case dividedByZero // nolga bo'lish
}
Bu yerda dividedByZero qiymatiga ega DivisionError nomli enum yaratdik.
DivisionError Error protocoliga mos kelgani uchun endi enumning xato qiymatini tashlashimiz mumkin bo'ladi.
2. Xato tashlaydigan funksiya yaratish
Xatolarni tashlash uchun throws kalit so'zidan foydalanib xato tashlaydigan funksiya yaratishimiz kerak.
Keyin funksiya ichida enum tomonidan ifodalangan ma'lum bir xatoni tashlash uchun throw operatoridan foydalanamiz. Masalan,
// throws kalit so'zi yordamida xato tashlaydigan funksiya yaratish
func division(numerator: Int, denominator: Int) throws {
// 0 ga bo'lish xatosini tashlash
if denominator == 0 {
throw DivisionError.dividedByZero
}
...
}
Bu yerda throws kalit so'zi yordamida division() nomli xato tashlaydigan funksiya yaratdik. Agar denominator == 0 bo'lsa, funksiya DivisionError enumining dividedByZero qiymatini tashlaydi.
Endi funksiya chaqiruvi paytida uzatilgan qiymatga asoslanib, xato sharti bajarilsa, funksiya xato tashlaydi.
throwkalit so'zireturnkalit so'zi bilan bir xil ta'sirga ega.returnfunksiyadan qiymat qaytaradi,throwesa funksiyadan xato qiymatini qaytaradi.
3. try Kalit So'zi Yordamida Funksiyani Chaqirish
Swiftda xato tashlaydigan funksiyani chaqirishda try kalit so'zidan foydalanamiz. Bu funksiya xato tashlashi mumkinligini bildiradi. Masalan,
// try kalit so'zi yordamida xato tashlaydigan funksiyani chaqirish
try division(numerator: 10, denominator: 0)
Ammo xatolarni boshqarish jarayoni hali tugallanmagan. Agar dasturni hozir ishga tushirsak, xato xabari olamiz: An error was thrown and was not caught
Shuning uchun tashlangan xatoni ushlash uchun do-catch operatoridan foydalanamiz.
4. do-catch operatori yordamida xatolarni boshqarish
Swiftda try kodini do bloki ichiga o'raymiz va barcha xatolarni boshqarish uchun catch blokini qo'shamiz. Masalan,
do {
try division(numerator: 10, denominator: 0)
...
}
catch DivisionError.dividedByZero {
// operator
}
Bu yerda xato tashlaydigan division() funksiyasini do bloki ichidan chaqirdik va funksiya xato tashlagan taqdirda uni ushlash uchun catch blokini qo'shdik.
Yuqoridagi catch bloki DivisionError ning enum qiymatiga asoslanib bajariladi.
Bu dasturimizda yuzaga kelishi mumkin bo'lgan xatolarni boshqarishning yakuniy bosqichi.
Misol:
// xato qiymatlari bilan enum yaratish
enum DivisionError: Error {
case dividedByZero // nolga bo'lish
}
// throws kalit so'zi yordamida xato tashlaydigan funksiya yaratish
func division(numerator: Int, denominator: Int) throws {
// 0 ga bo'lish xatosini tashlash
if denominator == 0 {
throw DivisionError.dividedByZero
}
else {
let result = numerator / denominator
print(result)
}
}
// do blokidan xato tashlaydigan funksiyani chaqirish
do {
try division(numerator: 10, denominator: 0)
print("To'g'ri bo'lish")
}
// agar funksiya xato tashlasa, xatoni ushlash
catch DivisionError.dividedByZero {
print("Xato: Maxraj 0 bo'la olmaydi")
}
Natija:
Xato: Maxraj 0 bo'la olmaydi
Yuqoridagi misolda:
DivisionErrorβ enumdivision()β xato tashlaydigan funksiyado-catchoperatori xatoni boshqaradi
Xato tashlaydigan funksiyaga qiymatlarni uzatish uchun try dan foydalandik:
try division(numerator: 10, denominator: 0)
uzatilgan qiymatlar xato shartiga mos keladimi yoki yo'qligini tekshirish uchun.
Agar xato sharti:
- bajarilsa β xato tashlaydigan funksiya xato tashlaydi, uni
catchbloki ushlaydi - bajarilmasa β xato tashlaydigan funksiya ichidagi
elseoperatori vadobloki ichidagi print operatori bajariladi
Xatolarni boshqarishni o'chirish
Swiftda ba'zan xato tashlaydigan funksiya runtime paytida xato tashlamasligiga ishonchimiz komil bo'lishi mumkin.
Bunday holatda xatolarni boshqarishni o'chirish uchun funksiya chaqiruvi paytida try! yozishimiz mumkin. Masalan,
enum DivisionError: Error {
case dividedByZero // nolga bo'lish
}
func division(numerator: Int, denominator: Int) throws {
if denominator == 0 {
throw DivisionError.dividedByZero
}
else {
let result = numerator / denominator
print("Natija:", result)
}
}
// xatolarni boshqarishni o'chirish
try! division(numerator: 10, denominator: 5)
Natija:
Natija: 2
Yuqoridagi misolda xatolarni boshqarishni o'chirish uchun funksiya chaqiruvi paytida try! dan foydalandik.
try! division(numerator: 10, denominator: 5)
Bu yerda denominator ga 5 qiymatini berganimiz uchun dastur xato tashlamasligini bilamiz. Shuning uchun xatolarni boshqarishni o'chirdik.
Shuningdek, try! dan foydalanganimizda do-catch operatoridan foydalanishimiz shart emasligini unutmang.
Agar
try!dan foydalansak va xato yuzaga kelsa, ilovamiz shunchaki ishdan chiqadi.
Swiftda xatolarning sabablari
Xato ko'plab sabablarga ko'ra yuzaga kelishi mumkin. Ulardan ba'zilari:
- Noto'g'ri foydalanuvchi kiritish
- Qurilma nosozligi
- Tarmoq ulanishining yo'qolishi
- Jismoniy cheklovlar (disk xotirasining tugashi)
- Kod xatolari
- Mavjud bo'lmagan faylni ochish
Xatolar dastur bajarilishini normal holatda to'xtatgani uchun bunday xatolarni boshqarish juda muhim.