Swift میں Extension: یہ کیا ہے، سینٹیکس اور طریقہ اضافہ کردن

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

Extension Swift میں ایک میکانزم ہے جو موجودہ قسموں کے مبادی کوڈ کو بدلے بغیر ان میں نئی فعالیت شامل کرنے کی اجازت دیتا ہے۔ اکسٹینشنز میادوں، حساب شدہ خواص، ابتدائی کار کار، subscripts، مداخل اقسام اور پروٹوکل موافقت کی حمایت کرتے ہیں۔ Apple Documentation, 2026 کے مطابق، extensions Swift مناصب میں کوڈ کی منظمی اور آپن/بند اصول کی پیروی کے لیے ایک کلیڈی آلا ہیں۔

اہم نکات

  • Extension — اصل کو بدلے بغیر موجودہ قسموں میں فعالیت کا اضافہ
  • حساب شدہ خواص — extension کے ذریعے شامل کیے جا سکتے ہیں، ذخیرہ شدہ نہیں
  • پروٹوکل موافقت — کسی بھی قسم کے لیے extension کے ذریعے پروٹوکل نفاذ
  • کوڈ کی منظمی — extensions متعلقہ منطق کو پروٹوکل کے اعتبار سے گروپ کرتے ہیں
  • آپن/بند — extensions وسیع کرنے کے لیے کھلے پن کے اصول کو نفاذ کرتے ہیں

Swift میں Extension کیا ہے؟

Extension Swift میں ایک زبانی تعمیر ہے جو کسی موجودہ قسم (کلاس، سٹرکچر، enum، پروٹوکل) کو نئی صلاحیتوں کے ساتھ وسیع کرنے کی اجازت دیتا ہے۔ یہ Objective-C میں زمروں کے ممانند ہے لیکن زیادہ طاقت کے ساتھ۔

Extension درج ذیل کا اضافہ کر سکتا ہے:

  • حساب شدہ خواص — انسٹنس اور قسم
  • میاد — انسٹنس اور قسم
  • ابتدائی کار کار (convenience init)
  • Subscripts
  • مداخل اقسام
  • پروٹوکل موافقتوں

Apple دستاویز کے مطابق، extension موجودہ میادوں کو منسوخ (dynamic dispatch) نہیں کر سکتا اور ذخیرہ شدہ خواص شامل نہیں کر سکتا۔ یہ حدوڈ اصل قسم کی سلامتی کو برقرار رکھتے ہیں۔

اکسٹینشن کا سینٹیکس

Extension کو کلیہ لفظ extension کے ساتھ وسیع کیے جانے والے قسم کو درج کرتے ہوئے ابلاغ کیا جاتا ہے۔

swift
extension Double {
    var km: Double { return self * 1000.0 }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1000.0 }
}

let distance = 5.0.km
print("5 km = \(distance) meters") // 5000.0

آپ نہ صرف اپنے ذاتی قسموں بلکہ Swift، Foundation، UIKit اور دیگر فرےم ورکس کے معیاری لائب ایں کے قسموں کو بھی وسیع کر سکتے ہیں۔ یہ extension کو ڈومین مخصوص فعالیت شامل کرنے کے لیے ایک طاقت ور آلا بناتا ہے۔

Extension کے ذریعے میاد کا اضافہ

Extension کسی بھی موجودہ قسم میں انسٹنس اور قسم کے میاد شامل کرنے کی اجازت دیتا ہے۔

swift
extension String {
    func isValidEmail() -> Bool {
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
        return self.range(of: emailRegex, options: .regularExpression) != nil
    }

    static func random(length: Int) -> String {
        let letters = "abcdefghijklmnopqrstuvwxyz0123456789"
        return String((0..<length).map { _ in letters.randomElement()! })
    }
}

let email = "user@example.com"
print(email.isValidEmail()) // true
let code = String.random(length: 8) // "a3f8k2m1"

Mutating میاد قیمت قسموں (struct, enum) کو وسیع کرتے ہیں اور self کو بدل سکتے ہیں۔ کلاسوں کے لیے mutating کی ضرورت نہیں ہے۔ Extension معیاری لائب ایں کے قسموں میں بھی mutating میاد شامل کر سکتا ہے۔

Extension میں حساب شدہ خواص

Extension صرف حساب شدہ خواص شامل کر سکتا ہے — ذخیرہ شدہ خواص کی اجازت نہیں ہے۔ یہ منطقی ہے کیونکہ extension اصل قسم کی میمری کا انتظام نہیں کرتا۔

swift
extension Date {
    var isPast: Bool {
        return self < Date()
    }

    var isToday: Bool {
        return Calendar.current.isDateInToday(self)
    }
}

let someDate = Date().addingTimeInterval(3600)
print(someDate.isPast) // false (one hour from now is future)

Extension میں حساب شدہ خواص اسی قواعد کی پیروی کرتے ہیں جو اهم نفاذ میں ہیں: آپ { get } اور { get set } خواص بنا سکتے ہیں۔ Swift ایک قسم کے لیے extension کی تعداد پر کوئی پابندی نہیں لگاتا۔ آپ ایک قسم کے لیے مختلف فائلوں میں جتنے چاہیں extension کا اعلان کر سکتے ہیں — بڑے مناصب میں یہ معمولی طرز ہے۔

Extension کے ذریعے پروٹوکل موافقت

Extension پروٹوکل نفاذ کا ترجیحی طریقہ ہے۔ اهم قسم کے اعلان کو پریشان کرنے کے بجائے، پروٹوکل کے تمام میاد الگ ایک extension میں رکھے جاتے ہیں۔

swift
struct User {
    let id: Int
    let name: String
    let email: String
}

// Extension per protocol — clean separation
extension User: Equatable {
    static func == (lhs: User, rhs: User) -> Bool {
        return lhs.id == rhs.id
    }
}

extension User: Codable {
    enum CodingKeys: String, CodingKey {
        case id, name, email
    }
}

یہ نظریہ ذمه داریوں کو علاحدہ کرتا ہے: اهم ساخت میں صرف ذخیرہ شدہ خواص ہوتے ہیں، extensions میں پروٹوکل نفاذ ہوتا ہے۔ Swift ان قسموں کے لیے بھی extension کے ذریعے پروٹوکل نفاذ کی اجازت دیتا ہے جنھے ہم کنٹرول نہیں کرتے۔

Extension اور کوڈ کی منظمی

Extension نہ صرف زبان کی صفحہ ہے بلکہ فنی معماری تنظیم کا ایک آلا ہے۔ extensions کا صحیح استعمال کوڈ کو پڑھنے اور برقرار رکھنے میں آسان بناتا ہے۔

  • پروٹوکل کے اعتبار سے گروپیں کرنا — ہر پروٹوکل الگ ایک extension میں
  • نشان (MARK)// MARK: - Equatable نیویگیشن کے لیے
  • فائل علاحدگی — مختلف پروٹوکل کے extensions مختلف فائلوں میں
  • ذاتی مددگار — extension میں ذاتی میاد کو private سے نشانہ کریں
swift
// MARK: - User + Displayable
extension User: Displayable {
    var displayName: String {
        return "\(name) (\(email))"
    }
}

Swift API Design Guidelines کے مطابق، extensions قابلیت پڑھائی میں بہتری کرتے ہیں: ڈیولپر اهم اعلان میں ڈیٹا کا ژانیڑہ اور extensions میں منطق دیکھتا ہے۔ یہ انٹرفیس علاحدگی کے اصول کے مطابق ہے۔

Where پابندیوں کے ساتھ extension صرف مخصوص قسموں کے لیے میاد شامل کرتا ہے: extension Array where Element: Equatable { func isUnique() -> Bool }. ایسا کوڈ مختصر اور قسم محفوظ ہے — isUnique میاد صرف Equatable عناصر والے arrays پر ظاہر ہوتا ہے، ترتیب کے وقت غلطیوں کو ختم کرتا ہے اور API کو دیگر ڈیولپرز کے لیے صافتر، محفوظتر اور واضح بناتا ہے۔

اکثر پوچے جانے والے سوالات

کیا extension ذخیرہ شدہ خواص شامل کر سکتا ہے؟

نہیں، extension ذخیرہ شدہ خواص شامل نہیں کر سکتا۔ یہ پابندی بنیادی ہے: extension قسم کے انسٹینس کے لیے میمری تخصیص میں حصہ نہیں لیتا۔ ذخیرہ شدہ خواص کے لیے اهم قسم کا اعلان استعمال کریں۔

کیا extension کے ذریعے موجودہ میاد کو منسوخ کیا جا سکتا ہے؟

نہیں، extension میادوں کو منسوخ نہیں کر سکتا۔ موجودہ میاد کے مشابہ دستخط کے ساتھ میاد کا اعلان کرنے کی کوشش ترتیب کی غلطی کا سبب بنے گی۔ منسوخی کے لیے کلاس وراثت استعمال کریں۔

Extension subclassing سے کیسے مختلف ہے؟

Extension نئی قسم بنائے بغیر فعالیت شامل کرتا ہے۔ Subclassing ایک درجہ بندی بناتا ہے اور منسوخی کی حمایت کرتا ہے۔ Extension کو اصل مبادی کوڈ تک رسائی کی ضرورت نہیں ہوتی اور یہ تمام قسموں کے ساتھ کام کرتا ہے۔

کیا extension generic ہو سکتا ہے؟

ہاں، extension generic ہو سکتا ہے اگر وسیع کیا جانے والا قسم generic ہے: extension Array where Element: Numeric. آپ extension کے اندر اپنے نفس کے قسم پیرامیٹرز کے ساتھ generic میاد بھی شامل کر سکتے ہیں۔

Extension کارکردگی پر کیسے اثر ڈالتا ہے؟

Extension کارکردگی کو متاثر نہیں کرتا — extension کے میاد عام میادوں کی طرح ترتیب پاتے ہیں۔ extension کے ساتھ پروٹوکل کے لیے سٹیٹک ڈسپیچ استعمال ہوتا ہے، جو کلاسوں کے ڈائنیمک ڈسپیچ سے تیز ہو سکتا ہے۔

خلاصہ

  • Extension حساب شدہ خواص، میادوں، پروٹوکل اور subscripts کا اضافہ کرتا ہے
  • ذخیرہ شدہ خواص کی اجازت نہیں — extension میمری مختص نہیں کرتا
  • پروٹوکل موافقت extension کے ذریعے Swift میں معمولی کوڈ تنظیم کا طریقہ ہے
  • آپن/بند کا اصول — قسم وسیع کرنے کے لیے کھلا ہے، تبدیل کے لیے بند
  • Generic extensions where جملوں کے ساتھ مخصوصی رویہ فراہم کرتے ہیں
  • پڑھنے کی اہلیت — extensions منطق کو پروٹوکل اور فنکشنز کے اعتبار سے گروپ کرتے ہیں

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

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

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

مزید پڑھیں