Swift میں Enum — یہ کیا ہے، نحو اور استعمال

مصنف: IT Sectr اشاعت: 2026-06-17 مطالعے کا وقت: 6 منٹ

Enum Swift میں ایک قسم ہے جو متعلقہ اقدار کے ایک گروپ کو ایک نام کے تحت متحد کرتی ہے۔ C اور Objective-C کے برعکس، جہاں enum صرف عددی ثابتوں کا ایک مجموعہ ہے، Swift first-class شمارندی اقسام پیش کرتا ہے جس میں associated values، raw values، طریقے اور پروٹوکول سپورٹ شامل ہیں۔ Apple، 2026 کے مطابق، enum iOS ڈیولپمنٹ میں ٹائپ سیف اسٹیٹ ماڈلنگ کے اہم اوزاروں میں سے ایک ہے۔

اہم نکات

  • Enum — متعلقہ اقدار کے گروپ کے لیے ایک قسم، ٹائپ سیفٹی یقینی بناتا ہے
  • Raw Values — تمام شمارندی کیسز کو تفویض کردہ ایک ہی قسم کی قدریں
  • Associated Values — مختلف ڈیٹا کی اقسام جو ہر کیس سے انفرادی طور پر منسلک ہوتی ہیں
  • کیسز کلیدی لفظ case سے اعلان کیے جاتے ہیں اور طریقے رکھ سکتے ہیں
  • Switch کے ساتھ enum کو مرتب کنندہ کے ذریعے تمام متبادلات کی مکمل جانچ درکار ہوتی ہے

Swift میں Enum کیا ہے؟

Enum (شمارندی قسم) ایک حسب ضرورت ڈیٹا کی قسم ہے جو باہمی طور پر مستثنیٰ متبادلات کے ایک محدود مجموعے کو متحد کرتی ہے۔ Swift میں، enum محض عددی ثابت نہیں ہے، بلکہ اپنی منطق کے ساتھ ایک مکمل قسم ہے۔

شمارندی قسم کے ہر متبادل کو کیس کہا جاتا ہے۔ Objective-C کے برعکس، جہاں enum ایک عددی قسم تک محدود ہے، Swift ہر کیس کو اپنا ڈیٹا ذخیرہ کرنے اور طریقے رکھنے کی اجازت دیتا ہے۔

Apple کے مطابق، Swift میں enum generics، ابتدا کاروں، حسابی خصوصیات اور پروٹوکول کی تعمیل کو سپورٹ کرتا ہے — جو اسے حالات، غلطیوں، اختیارات اور محدود حالت مشینوں کی ماڈلنگ کے لیے قابل اطلاق بناتا ہے۔

Enum کو وہاں استعمال کریں جہاں آپ کو باہمی طور پر مستثنیٰ متبادلات کے محدود مجموعے کو پیش کرنے کی ضرورت ہو: اسکرین کی حالتیں، غلطیوں کی اقسام، سمتیں، فلٹرنگ کے اختیارات۔

Enum اعلان کا نحو

Enum کلیدی لفظ enum کے ساتھ، اس کے بعد ایک نام اور گھنگریالے بریکٹ میں جسم کے ساتھ اعلان کیا جاتا ہے۔

swift
enum CompassDirection {
    case north
    case south
    case east
    case west
}

کیسز کو ایک ہی سطر میں کوما سے الگ کرکے اعلان کیا جا سکتا ہے:

swift
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

کیس تک رسائی کے لیے، معروف قسم کے بعد ڈاٹ نحو استعمال کریں:

swift
let direction = CompassDirection.north
// قسم معلوم ہے — مختصر نحو دستیاب ہے:
var currentPlanet = .earth

ایک بار جب متغیر کو معروف enum قسم تفویض ہو جاتی ہے، Swift خود بخود قسم کا اندازہ لگاتا ہے، اور کیسز تک رسائی کے وقت شمارندی قسم کا نام چھوڑا جا سکتا ہے۔

شمارندی اقسام میں Raw Values

Raw Values ایک ہی قسم کی قدریں ہیں جو ہر enum کیس کو تفویض کی جاتی ہیں۔ Associated values کے برعکس، raw values تمام کیسز کے لیے نوعیت میں یکساں ہوتی ہیں اور اعلان کے وقت متعین کی جاتی ہیں۔

swift
enum HTTPStatusCode: Int {
    case ok = 200
    case notFound = 404
    case internalServerError = 500
}

let code = HTTPStatusCode.notFound
print(code.rawValue) // 404

عددی raw values کے لیے، اگر صرف پہلی قدر واضح طور پر متعین کی گئی ہو تو Swift خود بخود اقدار کو بڑھاتا ہے:

swift
enum Status: Int {
    case pending = 1
    case active      // 2
    case completed   // 3
}

Raw values Int، String، Character اقسام یا RawRepresentable پروٹوکول کی تعمیل کرنے والی کسی بھی قسم کی ہو سکتی ہیں۔ Swift خود بخود raw value سے enum بنانے کے لیے ابتدا کار init? تیار کرتا ہے — APIs سے ڈیٹا پارس کرنے کے لیے آسان۔

Enum میں Associated Values

Associated Values ہر enum کیس سے انفرادی طور پر مختلف ڈیٹا کی اقسام منسلک کرنے کی اجازت دیتی ہیں۔ Raw values کے برعکس، associated values قسم اور مقدار میں مختلف ہو سکتی ہیں۔

swift
enum NetworkError {
    case timeout(seconds: Int)
    case httpError(code: Int, message: String)
    case noConnection
    case unknown(error: Error)
}

Switch کے ساتھ پروسیسنگ کے دوران، associated values متغیرات یا ثابتوں میں بائنڈنگ کے ذریعے نکالی جاتی ہیں:

swift
let error = NetworkError.httpError(code: 403, message: "Forbidden")

switch error {
case .timeout(let seconds):
    print("\(seconds)s سیکنڈ کے بعد وقت ختم")
case .httpError(let code, let message):
    print("HTTP \(code): \(message)")
case .noConnection:
    print("کوئی کنکشن نہیں")
case .unknown(let err):
    print("نامعلوم: \(err.localizedDescription)")
}

Apple کی دستاویزات کے مطابق، associated values enum کو علیحدہ ریپر اقسام بنائے بغیر پیچیدہ حالات کی ماڈلنگ کے لیے ایک اظہار خیال کرنے والا آلہ بناتی ہیں۔ Result جیسے منظرناموں اور سیاق و سباق کے ساتھ غلطیوں کی ماڈلنگ کے لیے ان کا استعمال کریں۔

تکراری Enum (indirect)

تکراری Enum — ایک شمارندی قسم جس کے کیسز خود enum قسم کا حوالہ دیتے ہیں۔ ایسے کیسز کو کلیدی لفظ indirect سے نشان زد کیا جاتا ہے۔

swift
indirect enum LinkedList<T> {
    case empty
    case node(value: T, next: LinkedList<T>)
}

enum سے پہلے indirect استعمال کرنے سے تمام کیسز تکراری نشان زد ہو جاتے ہیں۔ متبادل طور پر، صرف مخصوص کیس کو indirect سے نشان زد کیا جا سکتا ہے:

swift
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

Swift تکراری کیسز کو قدروں کے بجائے حوالہ جات (reference semantics) کے طور پر ذخیرہ کرنے کے لیے indirect استعمال کرتا ہے — یہ اسٹیک پر enum کے لامحدود سائز کو روکتا ہے۔ تکراری enum درختوں، منسلک فہرستوں اور AST کی تعمیر میں بڑے پیمانے پر استعمال ہوتے ہیں۔

Enum اور پروٹوکول

Enum بالکل ڈھانچوں اور کلاسوں کی طرح پروٹوکول کی تعمیل کر سکتا ہے۔ Swift میں پروٹوکول پر مبنی پروگرامنگ کی یہ ایک اہم صلاحیت ہے۔

swift
protocol Describable {
    var description: String { get }
}

enum PaymentMethod: Describable {
    case creditCard(last4: String)
    case applePay
    case bankTransfer

    var description: String {
        switch self {
        case .creditCard(let last4):
            return "Card ending in \(last4)"
        case .applePay:
            return "Apple Pay"
        case .bankTransfer:
            return "Bank Transfer"
        }
    }
}

Enum Cocoa پروٹوکولز کی بھی تعمیل کر سکتا ہے — مثال کے طور پر، تمام کیسز کے مجموعے کی خودکار تخلیق کے لیے CaseIterable، یا سیریلائزیشن کے لیے Codable۔ یہ enum کو Swift ایپلیکیشنز میں ایک ورسٹائل بلڈنگ بلاک بناتا ہے۔

اکثر پوچھے گئے سوالات

Swift میں enum اور struct میں کیا فرق ہے؟

Enum باہمی طور پر مستثنیٰ متبادلات کے محدود مجموعے والی قسم ہے، جبکہ struct خصوصیات کے صوابدیدی مجموعے والی قسم ہے۔ Enum میں stored properties نہیں ہو سکتیں، لیکن computed properties اور طریقوں کو سپورٹ کرتا ہے۔

کیا enum میں ایک ساتھ raw values اور associated_values دونوں ہو سکتی ہیں؟

نہیں، enum میں ایک ساتھ raw values اور associated_values دونوں نہیں ہو سکتیں۔ Raw values تمام کیسز کے لیے ایک ہی قسم کی قدریں ہیں، associated_values ہر کیس کے لیے انفرادی ڈیٹا ہیں۔ یہ میکانزم باہمی طور پر مستثنیٰ ہیں۔

Enum کے تمام کیسز کی صف کیسے حاصل کریں؟

CaseIterable پروٹوکول کی تعمیل شامل کریں۔ Swift خود بخود allCases خاصیت تیار کرے گا، جو اعلان کی ترتیب میں تمام کیسز کا مجموعہ لوٹاتا ہے۔ یہ تمام متبادلات پر تکرار کرنے کے لیے آسان ہے۔

کیا enum پر کارروائی کے لیے switch کا استعمال لازمی ہے؟

Switch سب سے محفوظ طریقہ ہے کیونکہ مرتب کنندہ تمام کیسز کی جانچ کرتا ہے۔ ایک کیس چیک کرنے کے لیے if case یا associated values کے بغیر enum کے لیے == استعمال کیا جا سکتا ہے۔

کیا generics کے ساتھ enum بنایا جا سکتا ہے؟

ہاں، enum generics کو سپورٹ کرتا ہے: enum Result<T, E> { case success(T); case failure(E) }۔ یہ کامیابی اور غلطی کو سنبھالنے کے لیے ٹائپ سیف generic تعمیرات بنانے کی اجازت دیتا ہے۔

خلاصہ

  • Enum Swift میں طریقوں، generics اور پروٹوکول کی سپورٹ کے ساتھ ایک مکمل قسم ہے
  • Raw Values تمام کیسز کے لیے ایک ہی قسم کی قدریں متعین کرنے کی اجازت دیتی ہیں
  • Associated Values ہر کیس میں مختلف ڈیٹا منسلک کرنے کی صلاحیت دیتی ہیں
  • Indirect کیسز enum میں تکراری ڈھانچوں کے لیے ضروری ہیں
  • پروٹوکول enum کے ذریعے لاگو کیے جا سکتے ہیں — یہ Swift میں POP کی بنیاد ہے
  • Switch کے ساتھ enum مرتب وقت پر تمام کیسز کی مکمل پروسیسنگ کو یقینی بناتا ہے
  • محدود حالتوں اور ٹائپ سیف اختیارات کی ماڈلنگ کے لیے enum استعمال کریں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں