RxSwift — یہ کیا ہے، کلیدی تصورات اور ری ایکٹیو پروگرامنگ

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

RxSwift Swift کے لیے ایک ری ایکٹیو پروگرامنگ لائبریری ہے جو Observable پیٹرن کو نافذ کرتی ہے۔ ReactiveX، 2025 کے مطابق، یہ Apple ایکو سسٹم کے لیے Reactive Extensions کا سب سے مقبول نفاذ ہے۔ Observable واقعات کا ذریعہ ہے، جبکہ Observer انہیں وصول کرنے کے لیے سبسکرائب کرتا ہے۔

اہم نکات

  • RxSwift — Observable، Subject اور 300+ آپریٹرز کی معاونت کے ساتھ Swift کے لیے Reactive Extensions کا نفاذ
  • Observable — واقعات کا ذریعہ جو قدریں، خرابیاں یا تکمیل کا اشارہ خارج کرتا ہے
  • Subject — بیک وقت Observable اور Observer، سٹریم میں دستی طور پر واقعات داخل کرنے کی اجازت دیتا ہے
  • DisposeBag — خودکار میموری مینجمنٹ طریقہ کار، ڈی ایلوکیشن پر سبسکرپشن منسوخ کرتا ہے
  • Schedulers — عملدرآمد کے تھریڈز کا انتظام کرتے ہیں، مین اور بیک گراؤنڈ قطاروں کے درمیان سوئچ کرنے کی اجازت دیتے ہیں

RxSwift کیا ہے؟

RxSwift Swift زبان کے لیے ایک ری ایکٹیو پروگرامنگ لائبریری ہے، جو Reactive Extensions (Rx) سے پورٹ کی گئی ہے۔ یہ Observable Sequence کے ذریعے غیر متزامن اور واقعہ پر مبنی پروگراموں کو بیان کرنے کی اجازت دیتی ہے — وقت کے ساتھ دستیاب ڈیٹا کی ایک ترتیب۔ iOS ڈیویلپرز RxSwift کا استعمال نیٹ ورک کی درخواستوں، UI واقعات اور سٹریمنگ ڈیٹا کو بغیر نیسٹڈ کال بیک کے ہینڈل کرنے کے لیے کرتے ہیں۔

Observable اور Observer

RxSwift کی بنیاد دو اہم پروٹوکولز پر مشتمل ہے: ObservableType — واقعات کا ذریعہ جو تین قسم کے سگنل خارج کر سکتا ہے: .next(value)، .error(error) اور .completed۔ Observer subscribe طریقہ کے ذریعے Observable کو سبسکرائب کرتا ہے اور یہ واقعات وصول کرتا ہے۔ اس ماڈل کو Reactive Streams کہا جاتا ہے اور یہ ضمانت دیتا ہے کہ صحیح سبسکرپشن پر کوئی واقعہ ضائع نہیں ہوتا۔

تبدیلی کے آپریٹرز

RxSwift سٹریمز کے ساتھ کام کرنے کے لیے 300 سے زیادہ آپریٹرز فراہم کرتا ہے: map ہر واقعہ کو تبدیل کرتا ہے، filter صرف مماثل واقعات کو گزرنے دیتا ہے، flatMap نیسٹڈ Observable کو ایک سٹریم میں کھولتا ہے۔ آپریٹرز زنجیروں میں جڑتے ہیں، بغیر ضمنی اثرات کے ڈیٹا پروسیسنگ کی ایک اعلامیاتی پائپ لائن بناتے ہیں۔

Traits: Single، Completable، Maybe

بنیادی Observable کے علاوہ، RxSwift خصوصی ریپر اقسام فراہم کرتا ہے۔ Single بالکل ایک قدر یا خرابی خارج کرتا ہے — HTTP درخواستوں کے لیے مثالی۔ Completable قدر کے بغیر کامیابی یا ناکامی کے ساتھ مکمل ہوتا ہے — تحریری کارروائیوں کے لیے۔ Maybe دونوں منظرناموں کو یکجا کرتا ہے: قدر کے ساتھ، قدر کے بغیر یا خرابی کے ساتھ مکمل ہو سکتا ہے۔ یہ Traits معنویات کو آسان بناتے ہیں اور کوڈ کو خود دستاویزی بناتے ہیں۔

RxSwift میں ری ایکٹیو پروگرامنگ کیسے کام کرتی ہے

RxSwift میں ری ایکٹیو پروگرامنگ Observer پیٹرن پر بنائی گئی ہے۔ ObservableSequence معیاری لائبریری کے Sequence کی طرح ہے، لیکن عناصر تک غیر متزامن رسائی کے ساتھ۔ واقعات کا سٹریم آپریٹرز کی زنجیر کے ذریعے منتقل ہوتا ہے، ہر ایک اصلی کو تبدیل کیے بغیر ایک نیا ObservableSequence لوٹاتا ہے۔

آپریٹر زنجیریں

RxSwift میں آپریٹرز خالص فنکشنز ہیں جو ایک ObservableSequence لیتے ہیں اور ایک نیا لوٹاتے ہیں۔ مثال کے طور پر، map ہر عنصر پر تبدیلی لاگو کر کے ایک نیا تسلسل بناتا ہے۔ آپریٹرز کو ملا کر، ڈیویلپر ایک پائپ لائن بناتا ہے جہاں ڈیٹا بغیر درمیانی متغیرات کے تمام پروسیسنگ مراحل سے گزرتا ہے۔

Schedulers اور عملدرآمد کے تھریڈز

Schedulers RxSwift میں عملدرآمد کے تھریڈز پر ایک تجرید ہے۔ Scheduler طے کرتا ہے کہ کوڈ کس تھریڈ پر عملدرآمد کرے گا: MainScheduler — UI تھریڈ، SerialDispatchQueueScheduler — بیک گراؤنڈ قطار۔ آپریٹرز subscribeOn اور observeOn بالترتیب بتاتے ہیں کہ کام کہاں کیا جاتا ہے اور نتائج کہاں پراسیس کیے جاتے ہیں۔

RxSwift کے بنیادی اجزاء

RxSwift میں کئی بنیادی اقسام شامل ہیں، ہر ایک ری ایکٹیو پائپ لائن میں اپنا کام حل کرتی ہے۔ Single ایک Observable ہے جو بالکل ایک قدر یا خرابی خارج کرتا ہے، نیٹ ورک کی درخواستوں کے لیے آسان ہے۔ Completable قدر کے بغیر کامیابی یا ناکامی کے ساتھ مکمل ہوتا ہے۔ Maybe Single اور Completable کی خصوصیات کو یکجا کرتا ہے۔

Subject اور Relay

Subject ایک گرم Observable ہے جو Observer کے طور پر بھی کام کرتا ہے۔ PublishSubject صرف نئے واقعات سبسکرائبرز کو خارج کرتا ہے، BehaviorSubject — آخری واقعہ اور نئے واقعات۔ Relay Subject کی ایک قسم ہے جو .error یا .completed خارج نہیں کرتی، سٹریم کے تسلسل کو یقینی بناتی ہے۔ BehaviorRelay موجودہ قدر ذخیرہ کرتا ہے اور State-driven UI کے لیے موزوں ہے۔

DisposeBag

DisposeBag Disposable کا ایک مجموعہ ہے جو اپنے ڈی ایلوکیشن پر تمام سبسکرپشنز خودکار طور پر منسوخ کرتا ہے۔ iOS میں، DisposeBag عام طور پر UIViewController یا UIView میں شامل کیا جاتا ہے۔ جب اسکرین بند ہوتی ہے، DisposeBag صاف ہو جاتا ہے — یہ میموری لیک اور غیر موجود UI عناصر تک رسائی کو روکتا ہے۔

RxSwift کوڈ کی مثالیں

نیچے map آپریٹر کا استعمال کرتے ہوئے سٹرنگ کو تبدیل کرنے کے لیے ڈیٹا کی ایک صف سے Observable بنانے کی مثال ہے:

swift
let observable = Observable.of("Swift", "RxSwift", "Reactive")

observable
    .map { $0.uppercased() }
    .subscribe(onNext: { value in
        print("Received: \(value)")
    })
    .disposed(by: disposeBag)

دوسری مثال zip کا استعمال کرتے ہوئے دو نیٹ ورک درخواستوں کو یکجا کرنے کو ظاہر کرتی ہے — آپریٹر اس وقت تک انتظار کرتا ہے جب تک دونوں Observable ایک قدر خارج نہ کریں اور نتائج کو tuple میں یکجا کرتا ہے:

swift
let first = fetchUser(id: "123")
let second = fetchPosts(userId: "123")

Observable
    .zip(first, second)
    .observe(on: MainScheduler.instance)
    .subscribe(onNext: { user, posts in
        updateUI(user: user, posts: posts)
    })
    .disposed(by: disposeBag)

تیسری مثال حالت ذخیرہ کرنے اور تبدیلیوں پر UI خودکار اپ ڈیٹ کے لیے BehaviorRelay کا استعمال دکھاتی ہے: ہر state.accept() تبدیلی فوری طور پر سبسکرائبرز کو منتقل ہوتی ہے، جو MVVM آرکیٹیکچر میں State پیٹرن کے لیے مثالی ہے۔

swift
let state = BehaviorRelay(value: "idle")

state
    .subscribe(onNext: { status in
        print("Status: \(status)")
    })
    .disposed(by: disposeBag)

state.accept("loading") // Prints: Status: loading

RxSwift بمقابلہ دیگر طریقے

RxSwift روایتی غیر متزامن طریقوں (Delegation، NotificationCenter، Callback) سے اپنی اعلامیاتی نوعیت اور تشکیل پذیری میں مختلف ہے۔ Combine کے برعکس، RxSwift iOS 9+ کو سپورٹ کرتا ہے اور اس کے زیادہ آپریٹرز ہیں۔ تاہم، Combine زبان کی سطح پر Foundation اور SwiftUI میں ضم ہے، جو اسے نئے Apple منصوبوں میں فائدہ دیتا ہے۔

GCD (Grand Central Dispatch) پر RxSwift کا بنیادی فائدہ قطاروں کو دستی طور پر منظم کرنے کے بجائے تجرید کی سطح پر ڈیٹا سٹریمز کو یکجا اور تبدیل کرنے کی صلاحیت ہے۔ تاہم، RxSwift کو ری ایکٹیو تصورات سیکھنے کی ضرورت ہے، جو ٹیم کے لیے داخلے کی حد کو بڑھاتا ہے۔

عملی طور پر، RxSwift بڑے منصوبوں میں استعمال ہوتا ہے جہاں ری ایکٹیو زنجیریں UI واقعات، کاروباری منطق اور نیٹ ورک تعامل کو ایک پائپ لائن میں جوڑتی ہیں۔ مثال کے طور پر، ٹریڈنگ ایپلیکیشنز میں، قیمتوں کے سٹریمز RxSwift کے ذریعے پراسیس کیے جاتے ہیں: ticks WebSocket سے آتے ہیں، فلٹرنگ سے گزرتے ہیں، ٹائم فریم کے مطابق گروپ ہوتے ہیں اور ریئل ٹائم میں چارٹ پر دکھائے جاتے ہیں۔ Delegation یا NotificationCenter کے ذریعے پڑھنے کی اہلیت کھوئے بغیر اس منظر نامے کو نافذ کرنا مشکل ہے۔

RxSwift کے متبادل میں Combine (iOS 13+)، Swift Concurrency سے AsyncSequence (iOS 15+)، اور Apple پلیٹ فارمز سے منسلک نہ ہونے والی تیسری پارٹی لائبریریاں جیسے ReactiveSwift شامل ہیں۔ انتخاب کم سے کم معاون iOS ورژن اور ڈیویلپرز کے تجربے پر منحصر ہے۔ نئے iOS 15+ منصوبوں کے لیے، ٹیمیں اکثر AsyncSequence کا انتخاب کرتی ہیں — اسے لائبریری انسٹال کرنے کی ضرورت نہیں ہے اور یہ Swift زبان کے مقامی ڈھانچے استعمال کرتا ہے۔

RxSwift کے ساتھ آرکیٹیکچرل پیٹرن عام طور پر MVVM یا Clean Architecture کی پیروی کرتے ہیں۔ ViewModel میں تمام کاروباری منطق Observable زنجیروں کے طور پر ہوتی ہے، View تبدیل شدہ ڈیٹا کو سبسکرائب کرتی ہے۔ Input-Output پیٹرن ان پٹ واقعات (ٹیپ، ٹیکسٹ ان پٹ) کو آؤٹ پٹ حالتوں (بٹن کا متن، لوڈر کی نمائش) سے الگ کرتا ہے۔ یہ طریقہ جانچ کو آسان بناتا ہے: ViewModel کی جانچ ورچوئل Schedulers کے ذریعے UI کے بغیر کی جاتی ہے۔

RxSwift چھوٹے منصوبوں سے لے کر درجنوں ماڈیولز والی بڑی انٹرپرائز ایپلیکیشنز کے لیے موزوں ہے۔ بڑے منصوبوں میں، ری ایکٹیو زنجیریں پورے آرکیٹیکچر میں پھیلی ہوتی ہیں: RxProperty کے ذریعے UserDefaults کے مشاہدے سے لے کر Moya (Alamofire پر RxSwift ریپر) کے ذریعے نیٹ ورک کی درخواستوں تک۔ ہر ماڈیول الگ تھلگ ہے اور ری ایکٹیو انٹرفیس کے ذریعے بات چیت کرتا ہے، جو سبسکرائبرز کو تبدیل کیے بغیر نفاذ کی تبدیلی کو آسان بناتا ہے۔ صحیح آرکیٹیکچر کے ساتھ، RxSwift کلاسیکی طریقوں کے مقابلے میں کوڈ کی مقدار کم کرتا ہے، کیونکہ KVO، Target-Action یا NotificationCenter کے لیے boilerplate لکھنے کی ضرورت نہیں ہے۔

RxSwift RxDataSources والے منصوبوں میں فعال طور پر استعمال ہوتا ہے — UITableView اور UICollectionView کے ساتھ ری ایکٹیو کام کے لیے ایک لائبریری۔ RxDataSources خود بخود خلیوں کے پرانے اور نئے سیٹ کے درمیان فرق کا حساب لگاتا ہے اور متحرک تبدیلیاں لاگو کرتا ہے۔ یہ ڈیویلپر کو beginUpdates/endUpdates کے ساتھ دستی کام سے آزاد کرتا ہے اور ڈیٹا کے عدم تضاد کی وجہ سے کریش کو ختم کرتا ہے۔

RxSwift زنجیروں کی ڈیبگنگ کے لیے debug() آپریٹر ہے — یہ تمام واقعات لاگ کرتا ہے: subscribe، next، error، completed، dispose۔ پیچیدہ ری ایکٹیو پائپ لائنز تیار کرتے وقت یہ ایک ناگزیر ٹول ہے۔ debug(String) ایک شناخت کنندہ لیتا ہے جو لاگز میں ظاہر ہوتا ہے۔ میموری پروفائلنگ کے لیے، RxSwift.Resources.total ایپلیکیشن میں فعال Observable اور Disposable کی کل تعداد دکھاتا ہے — جب DisposeBag صاف نہ ہو یا retain cycle سبسکرپشن رکھے تو لیک کی شناخت میں مدد کرتا ہے۔ اضافی آپریٹر takeUntil(self.rx.deallocated) آبجیکٹ ڈی ایلوکیشن پر خود بخود سبسکرپشن منسوخ کرتا ہے — یہ لیک کے خلاف تحفظ کی ایک اور پرت ہے۔

RxSwift بہترین طریقے

RxSwift کوڈ لکھتے وقت، فی سبسکرپشن ایک Observable کے اصول پر عمل کرنا ضروری ہے: ہر ViewController کو ایک ہی Observable میں ایک سے زیادہ سبسکرپشن نہیں بنانی چاہیے — یہ ریس کنڈیشن کے خطرے کو کم کرتا ہے۔ Observable کی میموائزیشن کے لیے share() آپریٹر استعمال کیا جاتا ہے، جو کولڈ Observable کو 1 کے ری پلے بفر کے ساتھ گرم میں تبدیل کرتا ہے۔ مشترکہ وسائل کے ساتھ کام کرتے وقت، اخراج شروع کرنے کے لیے connect() استعمال کریں — یہ یقینی بناتا ہے کہ تمام سبسکرائبر پہلے واقعے سے پہلے جڑ جائیں۔

RxSwift کوڈ کی جانچ TestScheduler کے ذریعے کی جاتی ہے — ایک ورچوئل Scheduler جو وقت کو منظم کرنے کی اجازت دیتا ہے۔ testScheduler.createHotObservable(values) ورچوئل وقت کے حساب سے واقعات کی پہلے سے طے شدہ ترتیب کے ساتھ Observable بناتا ہے۔ testScheduler.start() پروسیسنگ شروع کرتا ہے۔ TestScheduler یہ جانچنے کی اجازت دیتا ہے کہ حقیقی تاخیر کے بغیر کس ترتیب اور کس ورچوئل ٹائم اسٹیمپ پر واقعات ہوتے ہیں، جس سے ٹیسٹ تیز اور متعین ہو جاتے ہیں۔

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

RxSwift میں Observable اور Subject میں کیا فرق ہے؟

Observable ایک ٹھنڈا ذریعہ ہے: یہ سبسکرپشن تک واقعات خارج نہیں کرتا۔ Subject گرم ہے: یہ سبسکرائبرز سے آزاد واقعات خارج کرتا ہے اور onNext کے ذریعے دستی طور پر قدریں ڈالنے کی اجازت دیتا ہے۔ PublishSubject صرف نئے واقعات منتقل کرتا ہے، BehaviorSubject — آخری واقعہ اور نئے واقعات۔

DisposeBag RxSwift میں میموری لیک کو کیسے روکتا ہے؟

DisposeBag تمام Disposable سبسکرپشنز ذخیرہ کرتا ہے۔ جب DisposeBag ڈی ایلوکیٹ ہوتا ہے (مثال کے طور پر، ViewController بند کرنے پر)، تمام ذخیرہ شدہ سبسکرپشنز خود بخود منسوخ ہو جاتی ہیں۔ یہ یقینی بناتا ہے کہ Observable تباہ شدہ UI آبجیکٹ کو کوئی واقعہ نہیں بھیجے گا۔

نئے iOS منصوبے میں کیا منتخب کریں: RxSwift یا Combine؟

اگر کم سے کم iOS ورژن 13+ ہے اور ٹیم SwiftUI جانتی ہے — Combine منتخب کریں۔ اگر منصوبہ iOS 12 اور اس سے نیچے کو سپورٹ کرتا ہے یا زیادہ آپریٹرز کی ضرورت ہے — RxSwift منتخب کریں۔ Combine Foundation (URLSession، Timer، NotificationCenter) کے ساتھ بہتر انضمام فراہم کرتا ہے۔

RxSwift میں Schedulers کیسے کام کرتے ہیں؟

Schedulers عملدرآمد کے تھریڈز کو تجرید کرتے ہیں۔ subscribeOn بتاتا ہے کہ سبسکرپشن کس Scheduler پر کی جاتی ہے (عام طور پر بیک گراؤنڈ)۔ observeOn طے کرتا ہے کہ واقعات کس Scheduler پر وصول کیے جاتے ہیں (اکثر UI اپ ڈیٹس کے لیے MainScheduler)۔ SerialDispatchQueueScheduler GCD کے ذریعے کام کرتا ہے۔

کیا RxSwift کو SwiftUI کے ساتھ استعمال کیا جا سکتا ہے؟

ہاں، RxSwift کو ObservableObject کے ذریعے SwiftUI کے ساتھ ضم کیا جا سکتا ہے۔ BehaviorRelay کو @Published خصوصیات کے طور پر استعمال کریں: Relay کی سبسکرپشن Combine میں تبدیلیاں منتقل کرتی ہے، اور SwiftUI @ObservedObject کے ذریعے View کو دوبارہ رینڈر کرتی ہے۔ یہ UIKit سے SwiftUI میں منتقلی کا ایک مقبول پیٹرن ہے۔

خلاصہ

  • RxSwift — Reactive Extensions اور Observable پیٹرن پر مبنی ایک ری ایکٹیو پروگرامنگ لائبریری
  • Observable تین قسم کے سگنل خارج کرتا ہے: .next، .error اور .completed
  • Subject (PublishSubject، BehaviorSubject) گرم سٹریمز کے لیے Observable اور Observer کو یکجا کرتا ہے
  • DisposeBag سبسکرپشنز کے لائف سائیکل کا انتظام کرتا ہے اور میموری لیک کو روکتا ہے
  • آپریٹرز (map، filter، flatMap، zip) اعلامیاتی پروسیسنگ زنجیریں بنانے کی اجازت دیتے ہیں
  • Schedulers بیک گراؤنڈ قطاروں اور UI تھریڈ کے درمیان عملدرآمد کو تبدیل کرتے ہیں
  • نئے iOS 13+ ڈیولپمنٹ کے لیے، Combine کو بلٹ ان متبادل کے طور پر غور کریں

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

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

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

مزید پڑھیں