Swift enum’lar va pattern matching


ULASHISH

Enum’lar va pattern matching

Chekli holatlar to‘plamini enum bilan modellashtiring, bog‘langan qiymatlar (associated values) qo‘shing va switch yordamida andozalar (patterns) bilan solishtiring.


Oddiy enum’lar

Belgilangan holatlar to‘plamiga ega tipni e’lon qilish uchun enum dan foydalaning.

Sintaksis: enum Direction { case north, south, east, west }

Misol

enum Direction { case north, south, east, west }

let d: Direction = .east
print(d)

O‘zingiz sinab ko‘ring »

Ushbu misol yo‘nalishlar enum’ini e’lon qiladi va qisqa nuqtali sintaksis yordamida qiymat yaratadi.


Bog‘langan qiymatlar (associated values)

Bog‘langan qiymatlar yordamida har bir holatga ma’lumot biriktiring.

Sintaksis: enum Result { case success(T), failure(Error) }

Misol

enum Barcode {
  case upc(Int, Int, Int, Int)
  case qr(String)
}

let b1 = Barcode.upc(8, 85909, 51226, 3)
let b2 = Barcode.qr("HELLO")

O‘zingiz sinab ko‘ring »

Ushbu misolda to‘rtta butun sonli UPC yoki stringli QR kod bo‘lishi mumkin bo‘lgan shtrix-kod ko‘rsatilgan.



Pattern matching (andoza bilan solishtirish)

Bog‘langan qiymatlarni ajratib olish uchun andozalar bilan switch dan foydalaning.

Sintaksis:

  • switch value { case .case(let x): ... }
  • Bitta holatni tekshirish uchun if case

Misol

func describe(_ code: Barcode) {
  switch code {
  case .upc(let numberSystem, let manufacturer, let product, let check):
    print("UPC: \(numberSystem)-\(manufacturer)-\(product)-\(check)")
  case .qr(let text):
    print("QR: \(text)")
  }
}

describe(b1)
describe(b2)

O‘zingiz sinab ko‘ring »

Ushbu misol bog‘langan qiymatlarni bog‘lash uchun pattern matching’dan foydalanadi va formatlangan tavsifni chiqaradi.


Xom qiymatlar (raw values)

Standart xom qiymatlarni (masalan, Int yoki String) belgilang va ulardan initsializatsiya qiling.

Sintaksis:

  • enum HTTPStatus: Int { case ok = 200, notFound = 404 }
  • HTTPStatus(rawValue: 200)

Misol

enum HTTPStatus: Int { case ok = 200, notFound = 404 }

let status = HTTPStatus(rawValue: 200)
print(status == .ok)

O‘zingiz sinab ko‘ring »

Ushbu misol muvaffaqiyatsiz bo‘lishi mumkin bo‘lgan initsializator (failable initializer) yordamida butun sonli holat kodini qayta enum qiymatiga moslaydi.

Maslahat: Har bir holat turli ma’lumotlarni talab qilsa, bog‘langan qiymatlarni afzal ko‘ring; xom qiymatlardan faqat API kodi kabi primitiv qiymatga moslash zarur bo‘lganda foydalaning.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!