@ObservedObject: یہ کیا ہے، کیسے کام کرتا ہے اور مثالیں

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

@ObservedObject SwiftUI میں ایک Property Wrapper ہے جو باہر سے بھیجے گئے ObservableObject مثال کو مشاہدہ کرنے کے لیے استعمال ہوتا ہے۔ @StateObject کے برعکس، @ObservedObject کوئی شے نہیں بناتا — یہ پہلے سے موجود شے کی تبدیلیوں کو سبسکرائب کرتا ہے۔ Apple Developer Documentation (2025) کے مطابق، @ObservedObject ان ذیلی ویوز میں استعمال ہوتا ہے جنہیں والد سے تعلق رکھنے والے ڈیٹا کو ٹریک کرنا ہوتا ہے۔ @ObservedObject شے کے لائف سائیکل کو منظم کیے بغیر رد عمل کنکشن فراہم کرتا ہے۔

اہم نکات

  • @ObservedObject — ملکیت کے بغیر ObservableObject کو مشاہدہ کرنے کے لیے Property Wrapper
  • تخلیق نہیں — شے والد ویو یا ماحول سے بھیجی جاتی ہے
  • @Published — ObservableObject کے اندر کی خصوصیات جن کی تبدیلیوں کو SwiftUI ٹریک کرتا ہے
  • دوبارہ ڈرائنگ — جب @Published خصوصیت تبدیل ہوتی ہے، SwiftUI تمام سبسکرائب کردہ ویوز کو اپڈیٹ کرتا ہے
  • @StateObject سے الجھائیں نہیں — @ObservedObject ایک مثال کی ضمانت نہیں دیتا

SwiftUI میں @ObservedObject کیا ہے؟

@ObservedObject ایک Property Wrapper ہے جو کسی ویو کو ObservableObject کی تبدیلیوں کا سبسکرائب کرتا ہے۔ ObservableObject Combine فریم ورک کا ایک پروٹوکول ہے جسے objectWillChange پبلشر کو لاگو کرنے کی ضرورت ہوتی ہے۔ جب @Published سے نشان زد کوئی بھی خصوصیت ObservedObject کے اندر تبدیل ہوتی ہے، پبلشر ایک سگنل بھیجتا ہے اور SwiftUI @ObservedObject کے ذریعے سبسکرائب کردہ تمام ویوز کو دوبارہ ڈرا کرتا ہے۔

@ObservedObject کی بنیادی خصوصیت ملکیت کا فقدان ہے۔ ویو شے بنانے یا تباہ کرنے کی ذمہ دار نہیں ہے۔ شے والد ویو میں (@StateObject کے ذریعے) بنائی جاتی ہے یا @EnvironmentObject کے ذریعے انجیکٹ کی جاتی ہے۔ ذیلی ویو صرف تبدیلیوں کو مشاہدہ کرتا ہے اور اپڈیٹس وصول کرتا ہے۔ اگر والد میں شے تبدیل کر دی جائے، @ObservedObject نئی مثال پر سوئچ کر جاتا ہے۔

@ObservedObject ڈیٹا شیئرنگ منظرناموں کے لیے موزوں ہے: صارف ماڈل، مشترکہ ترتیبات، سرور کنکشن کی حالت۔ جب مختلف سطحوں پر متعدد ویوز کو ایک ہی ڈیٹا دکھانے کی ضرورت ہو، @ObservedObject ہر ویو میں ایک ذریعہ کے لیے آزاد لیکن مطابق سبسکرپشنز بناتا ہے۔

@ObservedObject بمقابلہ @StateObject: کلیدی فرق

@ObservedObject اور @StateObject کے درمیان فرق SwiftUI انٹرویوز میں سب سے عام سوالات میں سے ایک ہے۔ بنیادی اصول: @StateObject شے بناتا ہے اور اس کا مالک ہوتا ہے، @ObservedObject پہلے سے موجود شے کو مشاہدہ کرتا ہے۔ اس اصول کی خلاف ورزی غیر متوقع ڈیٹا نقصان یا دوہری ابتدا کا باعث بنتی ہے۔

خصوصیت@StateObject@ObservedObject
شے کی تخلیقہاں، ویو کی ابتدا پرنہیں، تیار شدہ وصول کرتا ہے
ملکیتموجودہ ویووالد جزو
واحد مثالہاں، پورے لائف سائیکل کے لیےنہیں، تبدیل کی جا سکتی ہے
رینڈر پر دوبارہ تخلیقنہیں، محفوظ رہتی ہےوالد پر منحصر ہے
کہاں استعمال کریںروٹ ویو کا مالکذیلی ویوز

@StateObject ضمانت دیتا ہے کہ شے ایک بار بنتی ہے اور ویو سٹرکچر کی بار بار ابتداؤں سے بچ جاتی ہے۔ @ObservedObject شے کو باہر سے وصول کرتا ہے اور ہر والد سٹرکچر کی ابتدا پر دوبارہ بنتا ہے۔ اگر والد شے کے لیے @StateObject استعمال کرتا ہے، ذیلی ویوز محفوظ طریقے سے @ObservedObject لاگو کر سکتے ہیں — شے پورے درجہ بندی میں منفرد ہوگی۔

@ObservedObject تبدیلیوں کو کیسے ٹریک کرتا ہے

@ObservedObject کا ٹریکنگ میکانزم Combine اور ObservableObject پروٹوکول پر مبنی ہے۔ ابتدا کے دوران، SwiftUI objectWillChange پبلشر کو کال کرتا ہے — شے کو @Published خصوصیت تبدیل کرنے سے پہلے سگنل خارج کرنا ہوتا ہے۔ Combine سگنل کو SwiftUI ڈیپنڈنسی گراف میں بھیجتا ہے، جو تمام منحصر ویوز کو اپڈیٹ کی ضرورت کے طور پر نشان زد کرتا ہے۔ یہ قدر تبدیل ہونے سے پہلے ہم آہنگی سے ہوتا ہے۔

swift
class WeatherService: ObservableObject {
    @Published var temperature: Double = 22.0
    @Published var city: String = "Moscow"
}

struct WeatherView: View {
    @ObservedObject var weather: WeatherService

    var body: some View {
        VStack {
            Text("\(weather.city)")
            Text("\(weather.temperature)°C")
        }
    }
}

فہرست میں WeatherService دو @Published خصوصیات کے ساتھ ایک ObservableObject ہے۔ WeatherView @ObservedObject var weather: WeatherService کا اعلان کرتا ہے، والد سے مثال وصول کرتا ہے۔ جب temperature تبدیل ہوتی ہے، نئی قیمت سیٹ کرنے سے پہلے objectWillChange فعال ہوتا ہے، SwiftUI WeatherView کو دوبارہ ڈرا کرتا ہے اور اصل درجہ حرارت دکھایا جاتا ہے۔ سبسکرپشن SwiftUI کے ذریعے خود بخود منظم ہوتی ہے — ڈیولپر کو sink یا dispose کال کرنے کی ضرورت نہیں۔

@ObservedObject استعمال کے پیٹرن

پہلا پیٹرن ماڈل کو انیشیالائزر کے ذریعے بھیجنا ہے۔ والد @StateObject کے ذریعے ایک ObservableObject بناتا ہے اور اسے ذیلی ویوز کو @ObservedObject کے طور پر بھیجتا ہے۔ یہ ایک معیاری درجہ بندی ڈیٹا منتقلی ہے جہاں روٹ ویو ماڈل کے لائف سائیکل کا انتظام کرتا ہے اور تمام منسلک اجزاء تبدیلیوں کو سبسکرائب کرتے ہیں۔

دوسرا پیٹرن EnvironmentObject ہے، جو SwiftUI ماحول کے ذریعے @ObservedObject کا عالمی ورژن ہے۔ شے سین یا روٹ ویو سطح پر انجیکٹ کی جاتی ہے اور انیشیالائزرز کے ذریعے واضح بھیجے بغیر تمام ذیلی اجزاء کے لیے خود بخود دستیاب ہوتی ہے۔ ذیلی ویو کے اندر، @EnvironmentObject @ObservedObject کی طرح کام کرتا ہے لیکن شے کو ماحول سے وصول کرتا ہے۔

تیسرا پیٹرن متعدد ObservableObject کی ترکیب ہے۔ پیچیدہ ایپلیکیشنز میں، ایک ویو متعدد اشیاء کو مشاہدہ کر سکتا ہے: @ObservedObject var user: UserService, @ObservedObject var network: NetworkMonitor۔ یہ خدمات کے درمیان ذمہ داریوں کو الگ کرتا ہے اور ہر جزو کی جانچ پڑتال کی صلاحیت کو برقرار رکھتا ہے۔

swift
struct DashboardView: View {
    @ObservedObject var user: UserViewModel
    @ObservedObject var network: NetworkMonitor

    var body: some View {
        VStack {
            Text("Welcome, \(user.name)")
            HStack {
                Circle()
                    .fill(network.isConnected ? Color.green : Color.red)
                    .frame(width: 10, height: 10)
            }
        }
    }
}

DashboardView UserViewModel اور NetworkMonitor کو مشاہدہ کرتا ہے۔ ہر شے اپنے ڈیٹا ڈومین کو سنبھالتی ہے اور آزادانہ طور پر ویو کو تبدیلیوں کے بارے میں مطلع کرتی ہے۔ اگر نیٹ ورک منقطع ہوتا ہے، NetworkMonitor isConnected کو تبدیل کرتا ہے اور SwiftUI DashboardView کو دوبارہ ڈرا کرتا ہے، اشارے کا رنگ اپڈیٹ کرتا ہے۔ ObservableObject کی ترکیب SwiftUI ایپلیکیشنز میں ڈیٹا کو منظم کرنے کا ترجیحی طریقہ ہے۔

@Published: ObservableObject اور SwiftUI کے درمیان ربط

@Published Combine کا ایک Property Wrapper ہے جو ObservableObject کے اندر کسی خصوصیت میں خود بخود پبلشر شامل کرتا ہے۔ جب @Published خصوصیت تبدیل ہوتی ہے، Combine objectWillChange پبلشر کے ذریعے ایک واقعہ پیدا کرتا ہے۔ @ObservedObject یا @StateObject استعمال کرتے وقت SwiftUI اس پبلشر کو سبسکرائب کرتا ہے اور ہر نئی قیمت پر ویو کو دوبارہ ڈرا کرتا ہے۔

@Published تمام اقسام کو سپورٹ کرتا ہے، بشمول اختیاری، مجموعے اور حسب ضرورت ساخت۔ تاہم، مجموعوں (arrays، dictionaries) کے لیے، SwiftUI صرف حوالہ کی تبدیلی کو ٹریک کرتا ہے، مواد کی تبدیلی کو نہیں۔ کسی عنصر کے اضافے یا ہٹانے کا پتہ لگانے کے لیے، آپ کو پورے مجموعے کو دوبارہ تفویض کرنا ہوگا یا دستی objectWillChange.send() کے ساتھ ObservableObject استعمال کرنا ہوگا۔

ایک اہم تفصیل: @Published صرف ObservableObject کو لاگو کرنے والے class کے اندر استعمال ہونا چاہیے۔ ObservableObject کے باہر @Published استعمال کرنا کمپائلیشن غلطی کا باعث بنے گا۔ نیز، @Published کو سست ابتدائی خصوصیات (lazy var) یا حسابی خصوصیات پر لاگو نہیں کیا جا سکتا۔

@ObservedObject کے ساتھ عام غلطیاں

سب سے سنگین غلطی کسی شے کو بنانے کے لیے @ObservedObject کا استعمال ہے۔ اگر آپ والد ویو میں @ObservedObject var model = UserViewModel() لکھتے ہیں، ہر رینڈر ایک نیا UserViewModel مثال بنائے گا۔ ڈیٹا ضائع ہو جائے گا اور @Published سبسکرپشنز دوبارہ بن جائیں گی۔ تخلیق کے لیے ہمیشہ @StateObject استعمال کریں اور @ObservedObject صرف تیار شدہ شے وصول کرنے کے لیے استعمال کریں۔

دوسری غلطی @Published خصوصیات کو مرکزی تھریڈ سے باہر تبدیل کرنا ہے۔ ObservableObject Combine استعمال کرتا ہے جسے مرکزی تھریڈ (main actor) پر تبدیلیاں بھیجنے کی ضرورت ہوتی ہے۔ اگر آپ پس منظر کی قطار میں @Published تبدیل کرتے ہیں، SwiftUI نامناسب وقت پر ویو کو دوبارہ ڈرا سکتا ہے، جس سے ریس کنڈیشن پیدا ہو سکتی ہے۔ اپڈیٹس کے لیے DispatchQueue.main.async یا @MainActor استعمال کریں۔

تیسرا مسئلہ چکری اپڈیٹس ہے۔ اگر @Published تبدیلی ضمنی اثرات کو متحرک کرتی ہے جو دوبارہ @Published کو تبدیل کرتے ہیں، ایک لامتناہی دوبارہ ڈرائنگ لوپ پیدا ہوتا ہے۔ حل: گارڈ فلیگز (isUpdating) استعمال کریں یا واضح ذمہ داری کی حدود کے ساتھ مختلف ObservableObject میں منطق کو الگ کریں۔

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

کیا @ObservedObject اختیاری ہو سکتا ہے؟

ہاں، SwiftUI @ObservedObject var model: UserViewModel? کو سپورٹ کرتا ہے۔ تاہم، جب تک شے nil ہے، ویو تبدیلیوں کو سبسکرائب نہیں کرے گا۔ جب قیمت تفویض کی جاتی ہے، سبسکرپشن خود بخود فعال ہو جاتی ہے۔

@ObservedObject اور @EnvironmentObject میں کیا فرق ہے؟

@ObservedObject انیشیالائزر کے ذریعے شے وصول کرتا ہے، @EnvironmentObject SwiftUI ماحول کے ذریعے۔ @EnvironmentObject کو کنسٹرکٹرز کے ذریعے واضح بھیجنے کی ضرورت نہیں، لیکن شے کو درجہ بندی کی اوپری سطح پر انجیکٹ کیا جانا چاہیے۔

SwiftUI کو ObservableObject تبدیلی کے بارے میں دستی طور پر کیسے مطلع کریں؟

خصوصیت تبدیل کرنے سے پہلے objectWillChange.send() کال کریں۔ یہ اس وقت مفید ہے جب @Published موزوں نہ ہو (مثال کے طور پر، حسابی خصوصیات یا مجموعہ آپریشنز کے لیے جہاں تبدیلی سے پہلے اطلاع دینا ضروری ہو)۔

ایری کے اندر تبدیلی پر @ObservedObject ویو کو دوبارہ کیوں نہیں ڈرا کرتا؟

@ObservedObject اور @Published حوالہ کی تبدیلی کو ٹریک کرتے ہیں، مجموعہ کے مواد کی تبدیلی کو نہیں۔ دوبارہ ڈرائنگ شروع کرنے کے لیے، آپ کو ایری کو دوبارہ تفویض کرنا ہوگا: items.append(newItem) → items = items یا تبدیلی سے پہلے objectWillChange.send() استعمال کریں۔

کیا @ObservedObject ایسی struct میں استعمال کیا جا سکتا ہے جو View کو لاگو نہ کرے؟

نہیں، @ObservedObject ایک SwiftUI Property Wrapper ہے جو صرف View پروٹوکول کو لاگو کرنے والی اقسام کے اندر دستیاب ہے۔ عام struct کے لیے، ObservableObjectPublisher کے ساتھ براہ راست Combine استعمال کریں۔

خلاصہ

  • @ObservedObject — ملکیت کے بغیر ObservableObject کو مشاہدہ کرنے کے لیے Property Wrapper
  • @StateObject — شے بناتا ہے، @ObservedObject — موجودہ شے کو مشاہدہ کرتا ہے
  • @Published — ObservableObject خصوصیات کے لیے خودکار پبلشر
  • سبسکرپشن — @ObservedObject استعمال کرتے وقت SwiftUI خود بخود Combine سبسکرپشن کو منظم کرتا ہے
  • ترکیب — ایک ویو بیک وقت متعدد ObservableObject کو مشاہدہ کر سکتا ہے
  • Main actor — @Published خصوصیات صرف مرکزی تھریڈ پر تبدیل کی جانی چاہئیں
  • EnvironmentObject — ماحول کے ذریعے پوشیدہ بھیجنے کے لیے @ObservedObject کا متبادل

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

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

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

مزید پڑھیں