Published on

Swiftda Associated Valueli Enum

Authors

Bilimingizni sinab ko'ring!

20 ta savol Β· ~20 daqiqa

Swift enum mavzusida o'zaro bog'liq qiymatlarning sobit to'plamiga ega ma'lumot turini qanday e'lon qilishni o'rgandik.

Ammo ba'zan enum qiymatlariga qo'shimcha ma'lumot biriktirishni xohlashimiz mumkin. Enum qiymatlariga biriktirilgan bu qo'shimcha ma'lumotlar associated values (bog'langan qiymatlar) deyiladi.

Keling, misolni ko'raylik:

enum Distance {
  
  // associated value 
  case km(String)
  ...
}

Bu yerda (String) β€” km qiymatiga biriktirilgan qo'shimcha ma'lumot. Bu km ning qiymati faqat String bo'lishi mumkinligini bildiradi.

Endi enum qiymatiga associated valueni qanday tayinlashimizni ko'ramiz:

Distance.km("Metric System")

Bu yerda "Metric System" β€” km qiymati bilan bog'langan qiymat.

Misol:

Swift
Associated Value
enum Distance { // associated value case km(String) case miles(String) } // km ga string qiymat uzatish let dist1 = Distance.km("Metrik tizim") print(dist1) // miles ga string qiymat uzatish let dist2 = Distance.miles("Imperial tizim") print(dist2)

Yuqoridagi misolda quyidagi associated valuelarga ega Distance nomli enum yaratdik:

  • "Metrik tizim" β€” km qiymatiga tayinlandi
  • "Imperial tizim" β€” miles qiymatiga tayinlandi

Bir nechta qiymatni biriktirish

Swiftda bitta enum qiymatiga bir nechta qiymatni ham biriktirishimiz mumkin. Masalan,

Swift
Bir nechta Associated Value
enum Marks { // bir nechta Double qiymatni biriktirish case gpa(Double, Double, Double) // bir nechta String qiymatni biriktirish case grade(String, String, String) } // gpa ga uchta Double qiymat uzatish let marks1 = Marks.gpa(3.6, 2.9, 3.8) print(marks1) // grade ga uchta string qiymat uzatish let marks2 = Marks.grade("A", "B", "C") print(marks2)

Bu yerda ikki qiymatli enum yaratdik: gpa va grade. Enum qiymatlariga e'tibor bering:

// bir nechta Double qiymatni biriktirish
case gpa(Double, Double, Double)

// bir nechta String qiymatni biriktirish
case grade(String, String, String)

Bu gpa va grade ga mos ravishda uchta Double va String qiymatni biriktirishimiz kerakligini bildiradi. Bu associated valuelar tuple (kortej) ham deyiladi.

Shunday qilib, biz gpa ga 3.6, 2.9, 3.8 ni biriktirdik.

// gpa ga uchta butun son qiymat uzatish
var marks1 = Marks.gpa(3.5, 2.9, 3.8)

Va grade ga "A", "B", "C" ni biriktirdik.

// grade ga uchta string qiymat uzatish
var marks2 = Marks.grade("A", "B", "C")

Nomlangan Associated valuelar

Swiftda kodimizni yanada tushunarli qilish uchun associated valuega nom berishimiz ham mumkin. Masalan,

enum Pizza {

  case small(inches: Int)
}

Bu yerda associated valuega inches nomini berdik.

Nomlangan associated valueni o'qish

case small(inches: Int)

o'rniga

case small(Int)

dan ko'ra mantiqiyroq.

Misol:

Swift
Nomlangan Associated Value
enum Pizza { // nomlangan associated value case small(inches: Int) case medium(inches: Int) case large(inches: Int) } // berilgan nomlar yordamida qiymat uzatish let pizza1 = Pizza.medium(inches: 12) print(pizza1)

Yuqoridagi misolda associated valuega inches nomini berdik.

Associated valueni casega uzatayotganda berilgan nomdan foydalandik:

Pizza.medium(inches: 12)

Enum Associated Values va Switch operatori

Swift switch operatori yordamida enum associated valuelarni solishtira olamiz. Masalan,

Swift
Switch bilan Associated Value
enum Mercedes { case sedan(height: Double) case suv(height: Double) case roadster(height: Double) } let choice = Mercedes.suv(height: 5.4) switch(choice) { case let .sedan(height): print("Balandlik:", height) case let .suv(height): print("Balandlik:", height) case let .roadster(height): print("Balandlik:", height) }

Yuqoridagi misolda enum associated valuelarni solishtirish uchun switch operatoridan foydalandik. Quyidagi qatorga e'tibor bering:

var choice = Mercedes.suv(height: 5.4)

Bu yerda suv ga 5.4 ni biriktirdik va uni choice enum o'zgaruvchisiga tayinladik.

Keyin har bir case operatorining qiymati bilan enum caseni solishtirish uchun switch operatori ichida choice dan foydalandik. Switch case operatoriga e'tibor bering:

case let .suv(height):

Bu yerda let associated valueni height o'zgaruvchisiga bog'laydi, biz uni case tanasida ishlatishimiz mumkin.

Qiymat case let .suv ga mos kelgani uchun case ichidagi operator bajariladi.

Raw Values va Associated Values

Swiftda raw valuelar har bir enum qiymatiga berilgan oldindan belgilangan doimiy qiymatlardir. Masalan,

enum Vehicle: String {

  case car = "To'rt g'ildirakli"
  case bike = "Ikki g'ildirakli"
}

Bu yerda car va bike ga mos ravishda "To'rt g'ildirakli" va "Ikki g'ildirakli" raw valuelarni berdik.

Ammo associated valuelar enum qiymatlari bilan bog'langan o'zgaruvchilarga o'xshaydi. Masalan,

enum Marks {
  
  case grade(String)
  case gpa(Double)
}

Bu yerda grade va gpa mos ravishda String va Double turli associated valuega ega.

Va o'zgaruvchi yaratayotganda enum qiymatiga associated valueni tayinlaymiz.

var marks = Marks.grade("A")

Eslatmalar:

  • Enum bir vaqtning o'zida ham raw value, ham associated valuega ega bo'la olmaydi.
  • Enumning raw valuelari bir xil ma'lumot turida bo'lishi kerak. Ammo associated valuelar har qanday turda bo'lishi mumkin.
Buy mea coffee