Published on

Swiftda Optionals

Authors

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.

Swift
Optional e'lon qilish
var someValue: Int? var someAnotherValue: Int! = 0 print(someValue as Any) print(someAnotherValue as Any)

? va ! ikkisi ham optional yaratadi, lekin ularning ishlashida katta farq bor (quyida tushuntirilgan).

Optionalga qiymat berish va olish

Swift
Force unwrap misoli
let someValue: Int? = 5 print(someValue as Any) print(someValue!)

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)

Swift
Implicitly unwrapped optional
let someValue: Int! = 5 print(someValue!)

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

Swift
If-statement bilan tekshirish
var someValue: Int? var someAnotherValue: Int! = 0 if someValue != nil { print("Qiymat mavjud: \(someValue!)") } else { print("Qiymat yo'q") } if someAnotherValue != nil { print("Qiymat mavjud: \(someAnotherValue!)") } else { print("Qiymat yo'q") }

Kamchiligi: baribir ! bilan unwrap qilish talab qilinadi.

2. Optional Binding (if let) β€” eng xavfsiz usul

Swift
if let bilan xavfsiz unwrap
var someValue: Int? var someAnotherValue: Int! = 0 if let temp = someValue { print("Qiymat mavjud: \(temp)") } else { print("Qiymat yo'q") } if let temp = someAnotherValue { print("Qiymat mavjud: \(temp)") } else { print("Qiymat yo'q") }

if let optionalni xavfsiz ochadi va qiymatni tempga joylaydi.

3. guard let bilan unwrap qilish

Funksiya ichida yanada qulay.

Swift
guard let misoli
func testFunction() { let someValue: Int? = 5 guard let temp = someValue else { return } print("Qiymat mavjud: \(temp)") } testFunction()

guard β€” qiymat bo'lmasa tezda chiqadi, bo'lsa davom etadi.

4. Nil-coalescing operator (??)

Optional bo'sh bo'lsa, default qiymat tanlanadi.

Swift
Nil-coalescing operator (nil bo'lganda)
var someValue: Int? = nil let defaultValue = 5 let unwrappedValue: Int = someValue ?? defaultValue print(unwrappedValue)

Yana bir misol:

Swift
Nil-coalescing operator (qiymat bo'lganda)
var someValue: Int? = 10 let defaultValue = 5 let unwrappedValue: Int = someValue ?? defaultValue print(unwrappedValue)

?? 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:

  1. Int? optional yaratish
  2. Unga 10 qiymat berish
  3. 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:

Swift
1-masala yechimi
func solve() -> Int { let num: Int? = 10 // Optional yaratish return num! // Force unwrap } // Tekshirish print(solve())

Natija: 10 βœ…

Izoh:

  • Int? β€” bu optional Int turi
  • 10 β€” qiymat bor, shuning uchun ! xavfsiz
  • Agar nil bo'lsa, ! crash qiladi

Xavfsizroq variant: ?? operatori bilan:

return num ?? 0

Xulosa

  • Optional β€” qiymat bo'lishi yoki nil bo'lishi mumkin
  • ? β€” optional e'lon qilish
  • ! β€” force unwrap (xavfli)
  • if let β€” xavfsiz unwrap
  • guard let β€” funksiyada xavfsiz unwrap
  • ?? β€” nil bo'lsa default qiymat

Bu Swiftning eng muhim konsepsiyalaridan biri!

Buy mea coffee