- Published on
Swiftda Optionals
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Swiftda optional β bu qiymatga ega bo'lishi yoki umuman qiymatga ega bo'lmasligi (nil) mumkin bo'lgan maxsus turdir.
Oddiy ma'noda optionalni qutiga solingan poyabzal deb tasavvur qiling. Quti bo'sh bo'lishi yoki ichida poyabzal bo'lishi mumkin. Qutini ochmasdan turib unda poyabzal bor-yo'qligini bilolmaysiz.
Optional qanday e'lon qilinadi?
Optionalni e'lon qilish uchun turdan keyin ? yoki ! qo'shiladi.
? va ! ikkisi ham optional yaratadi, lekin ularning ishlashida katta farq bor (quyida tushuntirilgan).
Optionalga qiymat berish va olish
print(someValue) β optionalning o'zi: Optional(5)
print(someValue!) β optionalni majburiy ravishda ochish (force unwrap) β 5
Majburiy unwrap (!) faqat qiymat albatta mavjud ekanligiga 100% ishonganingizda ishlatiladi.
Majburiy ochiladigan optional (Implicitly Unwrapped Optional)
Int! β avtomatik unwrap qilinadi. Har safar ! qo'shish shart emas.
Lekin bunda ham qiymat doim mavjud bo'lishi shart, aks holda dastur xato bilan to'xtaydi.
Fatal error misoli
var someValue: Int!
var unwrappedValue: Int = someValue // CRASH!
Xato:
fatal error: unexpectedly found nil while unwrapping an Optional value
Sabab: someValue ichida nil bor, lekin kod uni majburiy unwrap qilyapti.
Optional Handling (Optionallarni to'g'ri ishlatish)
Optional qiymatni ishlatish uchun uni unwrap qilish kerak. Force unwrap (!) xavfli, shuning uchun Swift xavfsiz usullarni taklif qiladi.
Quyida 4 xil usul ko'rsatilgan:
1. If-statement bilan tekshirish
Kamchiligi: baribir ! bilan unwrap qilish talab qilinadi.
2. Optional Binding (if let) β eng xavfsiz usul
if let optionalni xavfsiz ochadi va qiymatni tempga joylaydi.
3. guard let bilan unwrap qilish
Funksiya ichida yanada qulay.
guard β qiymat bo'lmasa tezda chiqadi, bo'lsa davom etadi.
4. Nil-coalescing operator (??)
Optional bo'sh bo'lsa, default qiymat tanlanadi.
Yana bir misol:
?? operatori optionalda qiymat bo'lsa uni qaytaradi, bo'lmasa default qiymatni.
π Masalalarni qanday yechish kerak?
β Namuna: 1-masala yechimi
Masala: Int? optional yarating va 10 qiymat bering, keyin unwrap qilib qaytaring.
Bosqichma-bosqich yechim:
1-qadam: Masalani tushunish
Bizdan:
Int?optional yaratish- Unga 10 qiymat berish
- Unwrap qilib qaytarish
2-qadam: Starter kodni ko'rish
func solve() -> Int {
// Int? optional yarating
// ! bilan unwrap qiling
return 0
}
3-qadam: Optional yaratish
let num: Int? = 10
Bu yerda Int? β optional Int turi, 10 β qiymat.
4-qadam: Unwrap qilish
Optional ichidagi qiymatni olish uchun ! ishlatamiz:
return num!
To'liq yechim:
Natija: 10 β
Izoh:
Int?β bu optional Int turi10β qiymat bor, shuning uchun!xavfsiz- Agar
nilbo'lsa,!crash qiladi
Xavfsizroq variant:
??operatori bilan:return num ?? 0
Xulosa
- Optional β qiymat bo'lishi yoki
nilbo'lishi mumkin ?β optional e'lon qilish!β force unwrap (xavfli)if letβ xavfsiz unwrapguard letβ funksiyada xavfsiz unwrap??β nil bo'lsa default qiymat
Bu Swiftning eng muhim konsepsiyalaridan biri!