- Published on
Swiftda Associated Valueli Enum
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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:
enum Distance {
// associated value
case km(String)
case miles(String)
}
// km ga string qiymat uzatish
var dist1 = Distance.km("Metrik tizim")
print(dist1)
// miles ga string qiymat uzatish
var dist2 = Distance.miles("Imperial tizim")
print(dist2)
Natija:
km("Metrik tizim")
miles("Imperial tizim")
Yuqoridagi misolda quyidagi associated valuelarga ega Distance nomli enum yaratdik:
"Metrik tizim"βkmqiymatiga tayinlandi"Imperial tizim"βmilesqiymatiga tayinlandi
Bir nechta qiymatni biriktirish
Swiftda bitta enum qiymatiga bir nechta qiymatni ham biriktirishimiz mumkin. Masalan,
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
var marks1 = Marks.gpa(3.6, 2.9, 3.8)
print(marks1)
// grade ga uchta string qiymat uzatish
var marks2 = Marks.grade("A", "B", "C")
print(marks2)
Natija:
gpa(3.6, 2.9, 3.8)
grade("A", "B", "C")
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:
enum Pizza {
// nomlangan associated value
case small(inches: Int)
case medium(inches: Int)
case large(inches: Int)
}
// berilgan nomlar yordamida qiymat uzatish
var pizza1 = Pizza.medium(inches: 12)
print(pizza1)
Natija:
medium(inches: 12)
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,
enum Mercedes {
case sedan(height: Double)
case suv(height: Double)
case roadster(height: Double)
}
var 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)
}
Natija:
Balandlik: 5.4
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.