struct — یہ کیا ہے، کلیدی تصورات اور Swift میں نحو

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

Struct Swift زبان میں ایک ویلیو ٹائپ (value type) ہے، جس کی مثالیں کوڈ کے مختلف حصوں کے درمیان منتقل کرتے وقت کاپی ہو جاتی ہیں۔ کلاسز کے برعکس، ڈھانچے وراثت کی حمایت نہیں کرتے، لیکن وہ پروٹوکول نافذ کرتے ہیں، خصوصیات اور طریقے رکھتے ہیں، اور ARC کے بغیر پیش قیاسی میموری مینجمنٹ فراہم کرتے ہیں۔ Swift Programming Language Guide, 2026 کے مطابق، struct Swift کا بنیادی تعمیراتی بلاک ہے — یہاں تک کہ معیاری اقسام Int، String، Array اور Dictionary بھی ڈھانچے کے طور پر نافذ کی گئی ہیں۔ زبان ڈیٹا ماڈلنگ کے لیے ڈھانچے کو ترجیحی انتخاب کے طور پر تجویز کرتی ہے۔

اہم نکات

  • Struct Swift میں ایک ویلیو ٹائپ ہے جو تفویض پر کاپی ہوتا ہے اور حوالہ کے بجائے قدر کے ذریعے منتقل ہوتا ہے۔
  • Copy-on-Write ایک اصلاح ہے جس میں ڈیٹا کی اصل کاپی صرف قدر میں تبدیلی پر ہوتی ہے، تفویض پر نہیں۔
  • Mutating ایک کلیدی لفظ ہے جو ڈھانچے کی خصوصیات کو تبدیل کرنے والے طریقوں کے لیے درکار ہے۔
  • پروٹوکول — ڈھانچے پروٹوکول اور توسیعات کو نافذ کر سکتے ہیں، جو وراثت کے بغیر لچک فراہم کرتے ہیں۔
  • سلامتی — حوالہ چکر کی عدم موجودگی ڈھانچے کو ملٹی تھریڈڈ کوڈ اور ڈیٹا ماڈلز کے لیے ترجیحی بناتی ہے۔

Swift میں struct کیا ہے؟

Struct (ڈھانچہ) Swift میں ایک مرکب ڈیٹا ٹائپ ہے جو متعلقہ خصوصیات اور طریقوں کو ایک اکائی میں جمع کرتا ہے۔ کلاسز کے برعکس، ڈھانچے value types ہیں: جب کسی فنکشن میں منتقل کیا جائے یا نئے متغیر میں تفویض کیا جائے، اصل آبجیکٹ کے حوالہ کے بجائے ڈھانچے کی ایک آزاد کاپی بنائی جاتی ہے۔

Swift تمام ابتدائی اقسام کے لیے ڈھانچے استعمال کرتا ہے: Int، Double، String، Bool، Array، Dictionary اور Set۔ اس کا مطلب ہے کہ ایک بنیادی Int بھی ڈھانچے کی طرح برتاؤ کرتا ہے — تفویض پر ایک کاپی بنتی ہے۔ ڈویلپر خصوصیات اور طریقوں کے کسی بھی سیٹ کے ساتھ اپنا ڈھانچہ بیان کر سکتا ہے۔

Swift Evolution (SE-0143) کے مطابق، معیاری اقسام کو ڈھانچے کے طور پر نافذ کرنے کا فیصلہ کارکردگی اور پیش قیاسی کی وجہ سے ہے۔ Value types حوالہ چکر نہیں بناتے، ARC حوالہ گنتی کی ضرورت نہیں ہوتی، اور ضمانت دیتے ہیں کہ کاپی میں تبدیلی اصل کو متاثر نہیں کرے گی — یہ ملٹی تھریڈڈ منظرناموں میں ڈیٹا کی عدم تغیر کے لیے انتہائی اہم ہے۔

Struct بطور value type

ویلیو ٹائپ سیمنٹکس struct اور class کے درمیان بنیادی فرق ہے۔ جب آپ ڈھانچے کو نئے متغیر میں تفویض کرتے ہیں یا کسی فنکشن میں منتقل کرتے ہیں، Swift تمام ڈیٹا کی آزاد کاپی بناتا ہے۔ کاپی میں کوئی بھی تبدیلی اصل کو متاثر نہیں کرتی، حوالہ اقسام کے عام ضمنی اثرات کو ختم کرتی ہے۔

swift
// ویلیو ٹائپ سیمنٹکس کی مثال
struct Point {
    var x: Double
    var y: Double
}

var p1 = Point(x: 10, y: 20)
var p2 = p1        // p2، p1 کی ایک آزاد کاپی ہے
p2.x = 99            // صرف p2 تبدیل ہوتا ہے
print(p1.x)         // 10 — p1 تبدیل نہیں ہوا
print(p2.x)         // 99

Copy-on-Write اصلاح

Swift کاپی کو بہتر بنانے کے لیے Copy-on-Write (COW) استعمال کرتا ہے۔ اگر متعدد متغیرات ایک ہی ڈھانچے کا حوالہ دیتے ہیں لیکن ان میں سے کوئی ڈیٹا میں ترمیم نہیں کرتا، کوئی اصل کاپی نہیں ہوتی۔ Swift پہلی تبدیلی تک متغیرات کے درمیان میموری شیئر کرتا ہے — پھر ایک حقیقی کاپی بنائی جاتی ہے۔ یہ ضرورت سے زیادہ مختص آپریشنز کو روکتا ہے اور مجموعوں کے ساتھ کام کو تیز کرتا ہے۔

قابلیت تبدیلی اور mutating طریقے

بطور ڈیفالٹ، ڈھانچے کے طریقے اس کی خصوصیات میں ترمیم نہیں کر سکتے — Swift تبدیلیاں کرنے والے طریقوں کے لیے واضح mutating کلیدی لفظ کی ضرورت ہے۔ یہ پابندی اتفاقی تبدیلی سے بچاتی ہے اور کوڈ کو پیش قیاس بناتی ہے: اگر کوئی طریقہ mutating کے طور پر نشان زد نہیں ہے، تو آپ کو ضمانت ہے کہ ڈھانچہ تبدیل نہیں کریں گے۔

Mutating عمل میں

جب آپ کسی طریقے سے پہلے mutating کلیدی لفظ شامل کرتے ہیں، Swift ڈھانچے کی خصوصیات میں نئی قدریں لکھنے کی صلاحیت حاصل کرتا ہے۔ دراصل، طریقہ self = کے ذریعے ڈھانچے کی مثال کو مکمل طور پر نئی سے تبدیل بھی کر سکتا ہے۔ یہ طریقہ کار، مثال کے طور پر، Option اور Result اقسام میں استعمال ہوتا ہے۔

swift
// Mutating طریقے والا struct
struct Counter {
    private var value: Int = 0

    // Mutating طریقہ — خصوصیات کو تبدیل کر سکتا ہے
    mutating func increment() {
        value += 1
    }

    // Mutating طریقہ self کو مکمل طور پر تبدیل کر سکتا ہے
    mutating func reset() {
        self = Counter()
    }

    // غیر mutating طریقہ — صرف پڑھنے کے لیے
    func currentValue() -> Int {
        return value
    }
}

var counter = Counter()
counter.increment()
print(counter.currentValue())  // 1
counter.reset()
print(counter.currentValue())  // 0

Mutating کے قواعد: ڈھانچے کو var سے اعلان کرنا چاہیے، let سے نہیں — ایک مستقل ڈھانچہ mutating طریقہ کو کال نہیں کر سکتا۔ مرتب کنندہ تعمیر کے وقت اسے چیک کرتا ہے: let مستقل پر mutating طریقہ کال کرنے کی کوشش مرتبی غلطی کا سبب بنے گی۔

Struct vs Class: موازنہ

struct اور class کے درمیان انتخاب Swift میں بنیادی فیصلوں میں سے ایک ہے۔ دونوں اقسام میں خصوصیات، طریقے، ابتدا کار ہو سکتے ہیں اور پروٹوکول نافذ کر سکتے ہیں، لیکن میموری سیمنٹکس، وراثت اور زندگی کے دورانیے کے انتظام میں بنیادی فرق ہے۔

خصوصیتstructclass
قسمValue type (کاپی ہوتا ہے)Reference type (حوالہ)
وراثتحمایت نہیں کرتاحمایت کرتا ہے
ARC / حوالہ گنتیضرورت نہیںARC ضروری
اختتامیہحمایت نہیں کرتاdeinit کی حمایت کرتا ہے
مستقل میں خصوصیت کی تبدیلیصرف var کے ذریعےlet کے ذریعے ممکن (حوالہ مستقل ہے)
قسم کی تبدیلیحمایت نہیں کرتاحمایت کرتا ہے
مجموعوں میں ذخیرہبراہ راست ذخیرہ (قدر)حوالہ کے طور پر ذخیرہ (پوائنٹر)

ڈھانچے ترجیحی ہوتے ہیں جب ڈیٹا وراثت کی ضرورت نہیں رکھتا، مشترکہ شناخت نہیں ہونی چاہیے (مثلاً، نقاط، سائز، ترتیب) اور ماڈیولز کے درمیان منتقل ہوتا ہے۔ UI اجزاء (UIView، UIViewController)، سنگلٹن اور مشترکہ شناخت والی اشیاء کے لیے کلاسز منتخب کی جاتی ہیں۔

struct کب منتخب کریں

Apple Swift میں ڈیٹا ماڈلنگ کے لیے struct کو بطور ڈیفالٹ قسم استعمال کرنے کی تجویز کرتا ہے۔ ڈھانچے پیش قیاسی کاپی سیمنٹکس اور حوالہ گنتی کے اوور ہیڈ کی عدم موجودگی کی وجہ سے زیادہ تر منظرناموں کے لیے موزوں ہیں۔ آئیے عام حالات دیکھتے ہیں جہاں struct بہترین انتخاب ہے۔

وراثت کے بغیر ڈیٹا ماڈل

اگر کوئی وجود وراثت کی ضرورت کے بغیر ڈیٹا رکھتا ہے (Product، User، Order، Point)، struct استعمال کریں۔ مرتب کنندہ خود بخود memberwise initializer پیدا کرتا ہے — آپ کو دستی طور پر init لکھنے کی ضرورت نہیں۔ Equatable اور Hashable بھی ان ڈھانچوں کے لیے خود بخود نافذ ہوتے ہیں جن کی تمام خصوصیات ان پروٹوکولز کی پابند ہیں۔

ناقابل تغیر ڈیٹا

ترتیبات، سیٹنگز اور جھنڈوں کے لیے جو تخلیق کے بعد تبدیل نہیں ہوتے، struct class سے بہتر ہے۔ ایک مستقل (let) ڈھانچہ تمام اندرونی فیلڈز کی عدم تغیر کو یقینی بناتا ہے — class میں یہ صرف حوالے پر لاگو ہوتا ہے، آبجیکٹ کے مواد پر نہیں۔

ملٹی تھریڈڈ کوڈ

ویلیو سیمنٹکس کی وجہ سے ڈھانچے ملٹی تھریڈڈ ماحول میں محفوظ ہیں۔ ہر تھریڈ ڈیٹا کی ایک آزاد کاپی حاصل کرتا ہے اور دوسرے تھریڈز کو متاثر نہیں کرتا۔ Value types کے لیے تھریڈز کے درمیان ڈیٹا ریس ناممکن ہے، جو SwiftUI میں ماڈلز کے لیے struct کو ترجیحی انتخاب بناتا ہے (ObservableObject کو class درکار ہے، لیکن @State struct استعمال کرتا ہے)۔

swift
// ڈیٹا ماڈل کے لیے struct استعمال کی مثال
struct User: Codable, Identifiable {
    let id: UUID
    var name: String
    var email: String
    var isPremium: Bool

    // حساب شدہ خصوصیت — non-mutating
    var displayName: String {
        isPremium ? "\(name) ⭐️" : name
    }
}

// خودکار memberwise ابتدا کار
let user = User(
    id: UUID(),
    name: "Alice",
    email: "alice@example.com",
    isPremium: true
)

// ملٹی تھریڈنگ کے لیے کاپی کرنا محفوظ ہے
var userCopy = user
userCopy.isPremium = false
// user.isPremium true رہتا ہے

class استعمال کریں جب آپ کو وراثت (UIKit/AppKit اجزاء)، مشترکہ شناخت (delegate، observer) یا کنٹرول شدہ آبجیکٹ لائف سائیکل (deinit) کی ضرورت ہو۔ باقی سب کے لیے — struct استعمال کریں۔

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

Swift میں struct کیا ہے؟

Struct Swift میں ایک ویلیو ٹائپ ہے جو کوڈ کے حصوں کے درمیان منتقل کرتے وقت کاپی ہوتا ہے۔ ڈھانچوں میں خصوصیات، طریقے، ابتدا کار ہو سکتے ہیں اور وہ پروٹوکول نافذ کر سکتے ہیں۔ Swift کی بنیادی اقسام (Int، String، Array) ڈھانچے کے طور پر نافذ کی گئی ہیں۔

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

Struct ایک value type ہے (تفویض پر کاپی ہوتا ہے)، وراثت کی حمایت نہیں کرتا اور ARC کی ضرورت نہیں۔ Class ایک reference type ہے (حوالہ سے منتقل ہوتا ہے)، وراثت، اختتامیہ اور حوالہ گنتی کی حمایت کرتا ہے۔ ڈویلپر struct کو ڈیفالٹ قسم کے طور پر تجویز کرتے ہیں۔

Swift struct میں mutating کیا ہے؟

Mutating ایک کلیدی لفظ ہے جو اشارہ کرتا ہے کہ ڈھانچے کا کوئی طریقہ اس کی خصوصیات کو تبدیل کر سکتا ہے۔ Mutating کے بغیر، مرتب کنندہ فیلڈ کی تبدیلی کو منع کرتا ہے۔ Mutating طریقے صرف var کے ساتھ اعلان کردہ متغیرات پر کال کیے جا سکتے ہیں، let پر نہیں۔

Swift میں Copy-on-Write کیا ہے؟

Copy-on-Write (COW) ڈھانچوں کے لیے Swift کی ایک اصلاح ہے جس میں ڈیٹا کی اصل کاپی پہلی تبدیلی تک مؤخر کر دی جاتی ہے۔ جب تک تمام متغیرات صرف ڈھانچہ پڑھتے ہیں، وہ ایک میموری علاقہ شیئر کرتے ہیں۔ یہ بڑے مجموعوں کے ساتھ کام کرتے وقت کارکردگی بہتر کرتا ہے۔

Swift میں struct کب اور class کب استعمال کریں؟

وراثت کے بغیر ڈیٹا ماڈلز، ترتیبات، DTOs اور ملٹی تھریڈڈ منظرناموں کے لیے struct استعمال کریں۔ UIKit/AppKit UI اجزاء، سنگلٹن، مشترکہ شناخت والی اکائیوں (delegate، observer) اور اختتامیہ کی ضرورت والی اشیاء کے لیے class استعمال کریں۔

خلاصہ

  • Struct Swift میں ایک ویلیو ٹائپ ہے جو تفویض پر کاپی ہوتا ہے، کاپیوں کے درمیان بغیر ضمنی اثرات کے پیش قیاسی رویہ فراہم کرتا ہے۔
  • Copy-on-Write ڈھانچوں کی کارکردگی کو بہتر بناتا ہے — اصل کاپی صرف پہلی تبدیلی پر ہوتی ہے، ہر تفویض پر نہیں۔
  • Swift کی معیاری اقسام — Int, String, Array, Dictionary — ڈھانچے کے طور پر نافذ کی گئی ہیں، تمام بنیادی کارروائیوں کے لیے ویلیو سیمنٹکس کو یقینی بناتی ہیں۔
  • Mutating ڈھانچے کی خصوصیات کو تبدیل کرنے والے طریقوں کے لیے لازمی کلیدی لفظ ہے؛ اسے صرف var مثالوں پر کال کیا جا سکتا ہے۔
  • ڈھانچے وراثت کی حمایت نہیں کرتے لیکن پروٹوکول نافذ کرتے ہیں اور فعالیت شامل کرنے کے لیے توسیعات استعمال کر سکتے ہیں۔
  • Equatable اور Hashable ان ڈھانچوں کے لیے خود بخود نافذ ہوتے ہیں جن کی تمام خصوصیات ان پروٹوکولز کی پابند ہیں — مجموعوں میں موازنہ اور استعمال کو آسان بناتے ہیں۔
  • Apple struct کو ڈیفالٹ قسم کے طور پر تجویز کرتا ہے — class صرف اس وقت استعمال کریں جب وراثت، مشترکہ شناخت یا کنٹرول شدہ آبجیکٹ لائف سائیکل درکار ہو۔

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

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

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

مزید پڑھیں