Swift میں willSet اور didSet: یہ کیا ہے، نحو اور مبصرین کا کام

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

willSet اور didSet Swift میں پراپرٹی مبصر (property observers) ہیں جو پراپرٹی کی قدر تبدیل ہونے سے پہلے اور بعد میں کوڈ چلانے کی اجازت دیتے ہیں۔ computed properties کے برعکس، مبصرین نئی قدر کا حساب نہیں لگاتے بلکہ صرف تبدیلی پر ردعمل ظاہر کرتے ہیں۔ Apple کی دستاویزات، The Swift Programming Language (2026) کے مطابق، مبصرین ڈیٹا کی توثیق، انٹرفیس کی مطابقت پذیری اور کوڈ میں تبدیلیوں کی لاگنگ کے لیے ناگزیر ہیں۔

اہم نکات

  • willSet — پراپرٹی کی نئی قدر محفوظ کرنے سے پہلے بلایا جاتا ہے
  • didSet — نئی قدر محفوظ کرنے کے بعد بلایا جاتا ہے
  • newValue — willSet میں ایک غیر واضح پیرامیٹر جو نئی قدر رکھتا ہے
  • oldValue — didSet میں ایک غیر واضح پیرامیٹر جو پرانی قدر رکھتا ہے
  • مبصرین — ابتدا کے دوران اور init کے اندر کام نہیں کرتے

Swift میں willSet اور didSet کیا ہیں؟

willSet اور didSet Swift میں پراپرٹی مبصر (property observers) ہیں، جو stored properties میں تبدیلیوں کو ٹریک کرنے کا ایک بلٹ ان طریقہ کار ہے۔

دوسری زبانوں کے برعکس جہاں دستی setter نفاذ یا کال بیک سسٹم کی ضرورت ہوتی ہے، Swift تبدیلیوں پر ردعمل ظاہر کرنے کے لیے ایک اعلانیہ نحو فراہم کرتا ہے۔ مبصرین پراپرٹی کے اعلان کے فوراً بعد شامل کیے جاتے ہیں اور انہیں علیحدہ کال کرنے کی ضرورت نہیں ہوتی۔

Apple ڈویلپر دستاویزات (2026) کے مطابق، property observers کسی بھی کلاس، ساخت یا شمارندے کی stored properties کے لیے معاون ہیں۔ وہ computed properties کے ساتھ کام نہیں کرتے کیونکہ وہ قدر ذخیرہ نہیں کرتیں — ان کے لیے، تبدیلی پر ردعمل براہ راست setter میں لاگو کیا جاتا ہے۔

willSet کب بلایا جاتا ہے

willSet پراپرٹی کو نئی قدر تفویض کرنے سے فوراً پہلے بلایا جاتا ہے۔ willSet کے اندر، غیر واضح پیرامیٹر newValue دستیاب ہوتا ہے جس میں وہ قدر ہوتی ہے جو سیٹ کی جائے گی۔ اس لمحے، پراپرٹی کی موجودہ قدر ابھی تک تبدیل نہیں ہوئی ہے — آپ پراپرٹی کے ذریعے براہ راست پرانی قدر پڑھ سکتے ہیں۔

Swift Evolution تجویز SE-0001 (2024) کے مطابق، willSet اصل تبدیلی سے پہلے توثیق یا لاگنگ کرنے کی صلاحیت فراہم کرتا ہے۔ اگر willSet میں کوئی استثناء پھینکا جاتا ہے تو نئی قدر لاگو نہیں ہوگی، جو مبصرین کو ڈیٹا کے تحفظ کا طریقہ کار بناتا ہے۔

didSet کب بلایا جاتا ہے

didSet نئی قدر تفویض کرنے کے فوراً بعد بلایا جاتا ہے۔ didSet کے اندر، غیر واضح پیرامیٹر oldValue دستیاب ہوتا ہے جس میں تبدیلی سے پہلے کی قدر ہوتی ہے۔ اس مقام پر، پراپرٹی میں پہلے سے نئی قدر موجود ہوتی ہے اور آپ اس کا پرانی قدر سے موازنہ کر سکتے ہیں۔

Swift by Sundell (2025) کے مطابق، didSet سب سے مقبول مبصر ہے کیونکہ اس کی بعد از پروسیسنگ کے لیے اکثر ضرورت ہوتی ہے: یوزر انٹرفیس کو اپ ڈیٹ کرنا، منحصر فیلڈز کا دوبارہ حساب لگانا، یا تبدیلی کے بعد سرور کو ڈیٹا بھیجنا۔

پراپرٹی مبصر کا نحو

Property observers پراپرٹی کے فوراً بعد گھنگریالے بریکٹ استعمال کرتے ہوئے اعلان کیے جاتے ہیں۔ کم از کم نحو کے لیے صرف ایک مبصر کی ضرورت ہوتی ہے، لیکن آپ دونوں کا اعلان کر سکتے ہیں۔

swift
var score: Int = 0 {
    willSet {
        print("اسکور \(newValue) میں تبدیل ہو جائے گا")
    }
    didSet {
        print("اسکور \(oldValue) سے \(score) میں تبدیل ہو گیا")
    }
}

دونوں مبصر اختیاری ہیں — آپ صرف willSet یا صرف didSet بتا سکتے ہیں۔ willSet کے لیے آپ قوسین میں نام بتا کر newValue کا نام تبدیل کر سکتے ہیں۔

swift
var username: String = "guest" {
    willSet(newName) {
        print("\(newName) سیٹ کرنے والا ہوں")
    }
    didSet(oldName) {
        print("تھا \(oldName)، اب \(username)")
    }
}

Swift Language Guide (2026) کے مطابق، پیرامیٹرز کا نام تبدیل کرنا کوڈ کی پڑھنے کی اہلیت کو بہتر بناتا ہے، خاص طور پر جب پراپرٹی اور مبصرین لمبے ناموں والے بڑے پروجیکٹ میں استعمال ہوتے ہیں۔

willSet اور didSet کیسے کام کرتے ہیں

عملدرآمد کی ترتیب سختی سے متعین ہے: پہلے willSet (پرانی قدر دستیاب)، پھر تفویض، پھر didSet (نئی قدر دستیاب)۔

swift
class Temperature {
    var celsius: Double = 0.0 {
        willSet {
            print("درجہ حرارت \(celsius) سے \(newValue) میں تبدیل ہو جائے گا")
        }
        didSet {
            if celsius > 100.0 {
                print("ابلنے کا نقطہ تجاوز کر گیا!")
            }
        }
    }
}

ایک اہم حد: مثال بناتے وقت پراپرٹی کی ابتدا کے دوران مبصرین نہیں بلائے جاتے۔ init کے اندر، قدر تفویض کرنا willSet اور didSet کو متحرک نہیں کرتا — یہ تعمیر کے مرحلے میں ناپسندیدہ ضمنی اثرات کو روکتا ہے۔

Apple Swift Blog (2025) کے مطابق، یہ رویہ بہت سی دوسری زبانوں سے مختلف ہے جہاں setter تعمیر کنندگان میں بھی بلائے جاتے ہیں۔ Swift حفاظت کا انتخاب کرتا ہے: مبصرین آبجیکٹ کی ابتدا مکمل ہونے کے بعد ہی کام کرنا شروع کرتے ہیں۔

نیسٹڈ کالز اور تکرار

didSet کے اندر پراپرٹی تبدیل کرنے سے بار بار مبصر کالز ہو سکتی ہیں۔ Swift تکرار کو مسدود نہیں کرتا — پروگرامر کو اسے دستی طور پر کنٹرول کرنا ہوگا۔

swift
var counter: Int = 0 {
    didSet {
        if counter < 5 {
            counter += 1
        }
    }
}

ایسا کوڈ اگر باہر نکلنے کی شرط فراہم نہ کی گئی تو اسٹیک اوور فلو کے ساتھ مکمل تکرار پیدا کرے گا۔ Stack Overflow Swift Community (2025) کے مطابق، property observers کے ساتھ کام کرتے وقت یہ ابتدائی افراد کی سب سے عام غلطیوں میں سے ایک ہے۔

ساختوں کی خصوصیات کے لیے مبصرین

ساختیں بغیر کسی پابندی کے stored properties کے لیے willSet اور didSet کو سپورٹ کرتی ہیں۔ یہ یاد رکھنا ضروری ہے کہ ساختیں قدر کی اقسام ہیں، اور mutating طریقہ کے اندر پراپرٹی میں ترمیم کرنا بھی مبصرین کو متحرک کرتا ہے۔

swift
struct Point {
    var x: Double = 0.0 {
        didSet {
            print("X \(x) میں تبدیل ہو گیا")
        }
    }
    var y: Double = 0.0 {
        didSet {
            print("Y \(y) میں تبدیل ہو گیا")
        }
    }
}

var point = Point()
point.x = 5.0

حقیقی منصوبوں میں مبصرین کا استعمال

پراپرٹی مبصرین Swift منصوبوں میں وسیع پیمانے پر کاموں کے لیے استعمال ہوتے ہیں: یوزر انٹرفیس کی مطابقت پذیری سے لے کر ڈیٹا کی توثیق اور لاگنگ تک۔

قدروں کی توثیق

didSet آپ کو ایک غلط قدر کو سیٹ کرنے کے فوراً بعد واپس لانے یا درست کرنے کی اجازت دیتا ہے۔ یہ Objective-C میں بھاری setter کی جگہ لیتا ہے اور ماڈل کی سطح پر ڈیٹا کی سالمیت کو یقینی بناتا ہے۔

swift
var age: Int = 0 {
    didSet {
        if age < 0 || age > 150 {
            age = oldValue
        }
    }
}

یوزر انٹرفیس کی مطابقت پذیری

جب کوئی متعلقہ پراپرٹی تبدیل ہوتی ہے، تو آپ علیحدہ اپ ڈیٹ طریقہ کال کے بغیر خود بخود انٹرفیس عناصر کو اپ ڈیٹ کر سکتے ہیں۔

swift
var userName: String = "" {
    didSet {
        nameLabel.text = userName
    }
}

تبدیلیوں کی لاگنگ

willSet ڈیبگنگ یا آڈٹ کے مقاصد کے لیے لاگنگ کے لیے آسان ہے۔ آپ لاگو کرنے سے پہلے وقت اور نئی قدر ریکارڈ کر سکتے ہیں، اس بات کو یقینی بناتے ہوئے کہ لاگ میں تجزیہ کے لیے اصل ڈیٹا موجود ہے۔

objc.io (2025) کے مطابق، property observers خاص طور پر یک طرفہ ڈیٹا فلو والے فن تعمیرات میں مفید ہیں، جہاں بعد میں حالت کو دوبارہ پیدا کرنے کے لیے ہر پراپرٹی تبدیلی ریکارڈ کی جاتی ہے۔

computed properties کے ساتھ موازنہ

Computed properties فوری طور پر قدر کا حساب لگاتی ہیں اور ان میں کوئی ذخیرہ نہیں ہوتا، جبکہ willSet اور didSet ایک حقیقی قدر کے ساتھ stored property پر کام کرتے ہیں۔

خصوصیتProperty ObserversComputed Properties
قدر ذخیرہ کرتا ہےہاںنہیں
تبدیلی پر کوڈ چلاتا ہےہاںنہیں
اعلان کی قسمvarvar (get/set)
رسیس پیرامیٹرزnewValue, oldValuenewValue (set میں)
ابتداابتدائی قدر درکار ہےدرکار نہیں

بنیادی فرق: computed property ہر رسائی پر قدر کا حساب لگاتی ہے، جبکہ property observer موجودہ قدر کی تبدیلی پر ردعمل ظاہر کرتا ہے۔ ان کے درمیان انتخاب کا انحصار معنیات پر ہے — اگر پراپرٹی دوسرے ڈیٹا سے ماخوذ ہے تو computed استعمال کریں؛ اگر یہ ایک آزاد قدر ہے جس کی تبدیلیوں کی نگرانی کی ضرورت ہے تو willSet/didSet استعمال کریں۔

استعمال میں عام غلطیاں

سب سے عام غلطی باہر نکلنے کی شرط کے بغیر didSet کا تکراری کال ہے۔ didSet کے اندر ہر پراپرٹی تبدیلی مبصر کو دوبارہ متحرک کرتی ہے، جس سے لامتناہی لوپ پیدا ہوتا ہے۔

دوسری عام غلطی let پراپرٹیز پر مبصرین استعمال کرنے کی کوشش ہے۔ Swift کمپائلر ایک خرابی دے گا کیونکہ let ایک مستقل ہے۔

تیسری غلطی اس بات کو نظر انداز کرنا ہے کہ ابتدا کے دوران مبصر نہیں بلایا جاتا۔ ڈویلپر جو init کے اندر willSet کے فعال ہونے کی توقع رکھتے ہیں انہیں غیر متوقع رویہ ملتا ہے۔

چوتھا مسئلہ extension میں پراپرٹیز پر مبصرین لگانا ہے۔ Swift extension میں stored properties پر willSet/didSet شامل کرنے سے منع کرتا ہے۔

Ray Wenderlich (2025) کے مطابق، ان حدود کو سمجھنا ابتدائی مراحل میں کیڑوں سے بچنے میں مدد کرتا ہے اور Swift کوڈ کو زیادہ پیش قیاسی بناتا ہے۔

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

کیا willSet کو didSet کے بغیر استعمال کیا جا سکتا ہے؟

ہاں، ہر مبصر اختیاری ہے۔ آپ صرف willSet، صرف didSet، یا دونوں ایک ساتھ اعلان کر سکتے ہیں۔

کیا مبصرین extension میں کام کرتے ہیں؟

نہیں، Swift extension میں stored properties کے لیے willSet اور didSet شامل کرنے سے منع کرتا ہے۔ مبصرین صرف اصل قسم کی تعریف میں اعلان کیے جاتے ہیں۔

کیا init کے اندر پراپرٹی تبدیل کرنے پر مبصرین بلائے جاتے ہیں؟

نہیں، ابتدا کے دوران مبصرین نہیں بلائے جاتے۔ یہ ایک حفاظتی طریقہ کار ہے جو آبجیکٹ کی تعمیر کے مرحلے میں ضمنی اثرات کو روکتا ہے۔

willSet computed property کے setter سے کیسے مختلف ہے؟

willSet ایک stored property مبصر ہے جو قدر تبدیل ہونے سے پہلے عمل میں آتا ہے۔ computed property میں setter ایک نئی قدر کا حساب لگانے کا طریقہ ہے، نہ کہ موجودہ قدر کا مشاہدہ کرنے کا۔

didSet کے اندر پراپرٹی تبدیل کرنے پر کیا ہوتا ہے؟

بار بار didSet کال کرنے سے تکرار پیدا ہوگی۔ باہر نکلنے کی شرط کے بغیر، یہ اسٹیک اوور فلو اور پروگرام کے خاتمے کا باعث بنتا ہے۔

خلاصہ

  • willSet — پراپرٹی تبدیل ہونے سے پہلے عمل میں آنے والا مبصر، newValue تک رسائی کے ساتھ
  • didSet — پراپرٹی تبدیل ہونے کے بعد عمل میں آنے والا مبصر، oldValue تک رسائی کے ساتھ
  • نحو — مبصرین پراپرٹی کے اعلان کے بعد گھنگریالے بریکٹ میں اعلان کیے جاتے ہیں
  • ابتدا — مبصرین init کے اندر اور ڈیفالٹ قدر سیٹ کرتے وقت کام نہیں کرتے
  • استعمال — توثیق، یوزر انٹرفیس کی مطابقت پذیری، لاگنگ، تبدیلیوں کا آڈٹ
  • تکرار — didSet کے اندر پراپرٹی تبدیل کرنے کے لیے واضح باہر نکلنے کی شرط درکار ہے
  • Computed — computed properties کے ساتھ الجھائیں نہیں: مبصرین مشاہدہ کرتے ہیں، computed حساب لگاتی ہیں

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

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

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

مزید پڑھیں