RxSwift — यह क्या है, विशेषताएं और रिएक्टिव प्रोग्रामिंग

लेखक: IT Sectr प्रकाशित: 2026-05-03 पढ़ने का समय: 10 मिनट

RxSwift iOS के लिए एक रिएक्टिव प्रोग्रामिंग लाइब्रेरी है जो Observable पैटर्न और एसिंक्रोनस डेटा स्ट्रीम के साथ काम करने के लिए कार्यात्मक ऑपरेटरों को लागू करती है। यह ReactiveX (Rx) की अवधारणाओं को Swift भाषा में पोर्ट करती है, जो UI, नेटवर्क अनुरोधों, डेटाबेस और टाइमर से इवेंट को संभालने के लिए एक एकीकृत API प्रदान करती है। ReactiveX, 2025 के अनुसार, लाइब्रेरी का उपयोग GitHub पर 60,000 से अधिक प्रोजेक्ट्स में किया जाता है और नेटिव Combine के आगमन तक यह Swift में रिएक्टिव प्रोग्रामिंग का मानक बनी हुई है। RxSwift डेलिगेट्स, क्लोजर्स और नोटिफिकेशन को एकल इवेंट प्रोसेसिंग चेन से बदल देता है।

मुख्य बातें

  • RxSwift — Observable पैटर्न और ऑपरेटर चेन पर आधारित Swift के लिए ReactiveX कार्यान्वयन
  • Observable — एसिंक्रोनस इवेंट का स्रोत जो सफलतापूर्वक, त्रुटि के साथ या अनंत रूप से पूरा हो सकता है
  • Subject — Observable और Observer का एक संकर जो स्ट्रीम में मैन्युअल रूप से इवेंट भेजने की अनुमति देता है
  • Schedulers नियंत्रित करते हैं कि सब्सक्रिप्शन, अवलोकन और इवेंट प्रोसेसिंग किस थ्रेड पर की जाती है
  • ऑपरेटर map, flatMap, filter, combineLatest रेस कंडीशन के बिना स्ट्रीम को रूपांतरित और संयोजित करते हैं

RxSwift क्या है?

RxSwift 2012 में Microsoft द्वारा .NET के लिए बनाई गई ReactiveX (Rx) लाइब्रेरी का Swift पोर्ट है। Rx का मुख्य विचार किसी भी एसिंक्रोनस डेटा स्रोत को Observable अनुक्रम के रूप में प्रस्तुत करना है जिस पर कार्यात्मक ऑपरेटर लागू किए जा सकते हैं। iOS डेवलपमेंट में, RxSwift का उपयोग UI इवेंट (बटन टैप, टेक्स्ट इनपुट, जेस्चर) को स्पष्ट डेलिगेट्स और target-action के बिना एप्लिकेशन लॉजिक से जोड़ने के लिए किया जाता है।

लाइब्रेरी तीन मॉड्यूल से बनी है: RxSwift (कोर — Observable, Operator, Scheduler), RxCocoa (UIKit एकीकरण — UIButton, UITextField, UITableView के लिए rx एक्सटेंशन) और RxRelay (टर्मिनल इवेंट के बिना Subject)। यह अलगाव कोर को सर्वर-साइड Swift और परीक्षणों में उपयोग करने की अनुमति देता है, UI रैपर को केवल iOS एप्लिकेशन के लिए जोड़ता है।

Stack Overflow, 2025 सर्वेक्षण के अनुसार, RxSwift iOS के लिए शीर्ष 5 सबसे अधिक उपयोग की जाने वाली तृतीय-पक्ष लाइब्रेरी में से एक है। इसकी लोकप्रियता का मुख्य कारण सभी एसिंक्रोनस पैटर्न का एकसमान प्रबंधन है: URLSession के माध्यम से नेटवर्क अनुरोध, UIViewPropertyAnimator के माध्यम से एनिमेशन, NotificationCenter के माध्यम से सूचनाएं और DelegateProxy के माध्यम से डेलिगेट — यह सब एक पूर्वानुमानित जीवनचक्र के साथ Observable में समाहित हो जाता है।

रिएक्टिव प्रोग्रामिंग का दर्शन

रिएक्टिव प्रोग्रामिंग एक प्रतिमान है जिसमें प्रोग्राम डेटा परिवर्तनों पर प्रतिक्रिया करता है न कि उन्हें पोल करता है। “डेटा प्राप्त करें → प्रक्रिया करें → UI अपडेट करें” लिखने के बजाय, डेवलपर एक रूपांतरण श्रृंखला का वर्णन करता है: “जब डेटा बदलता है, फ़िल्टर लागू करें, फिर map, फिर UI अपडेट करें”। RxSwift इस प्रतिमान को आलसी निष्पादन वाली Observable श्रृंखलाओं के माध्यम से लागू करता है — जब तक कोई सब्सक्राइबर नहीं आता, कुछ भी नहीं होता।

RxSwift के मुख्य घटक: Observable, Subject, Disposable

Observable RxSwift का मूलभूत प्रकार है जो समय के साथ इवेंट के अनुक्रम का प्रतिनिधित्व करता है। Observable तीन प्रकार के इवेंट भेज सकता है: next (नया मान), error (स्ट्रीम को समाप्त करने वाली त्रुटि) और completed (सफल समाप्ति)। सीमित Observable (सभी मान भेजने के बाद पूरा होते हैं) और असीमित Observable (जैसे UI इवेंट — कभी पूरा नहीं होते) होते हैं।

Observable और इसका जीवनचक्र

Observable के जीवनचक्र में तीन चरण शामिल हैं: निर्माण (create, just, from), रूपांतरण (ऑपरेटर map, filter, flatMap) और सब्सक्रिप्शन (subscribe)। सब्सक्रिप्शन के बिना, Observable कोई कार्य नहीं करता — यह एक आलसी अनुक्रम है। सब्सक्रिप्शन के बाद, Observable तब तक सब्सक्राइबर को इवेंट भेजना शुरू करता है जब तक वह पूरा नहीं हो जाता या सब्सक्राइबर Disposable के माध्यम से सब्सक्रिप्शन रद्द नहीं कर देता।

swift
import RxSwift

// ऐरे से Observable बनाना
let numbers = Observable.from([1, 2, 3, 4, 5])

// ऑपरेटरों के माध्यम से रूपांतरण
let squared = numbers
    .filter { $0 % 2 == 0 }
    .map { $0 * $0 }

// इवेंट हैंडलिंग के साथ सब्सक्रिप्शन
let disposable = squared
    .subscribe(onNext: { print($0) },
               onError: { print("Error: \($0)") },
               onCompleted: { print("Done") })

Subject एक प्रकार है जो एक साथ Observable (इसकी सदस्यता ली जा सकती है) और Observer (इसमें इवेंट भेजे जा सकते हैं) है। RxSwift चार प्रकार के Subject प्रदान करता है: PublishSubject (केवल नए इवेंट), BehaviorSubject (प्रारंभिक मान के साथ), ReplaySubject (अंतिम N इवेंट को बफर करता है) और AsyncSubject (पूरा होने से पहले केवल अंतिम मान)। Subject रिएक्टिव चेन में इम्पेरेटिव कोड (क्लोजर, डेलिगेट) को एकीकृत करने के लिए उपयोगी है।

Disposable एक सब्सक्रिप्शन रद्दीकरण टोकन है। जब सब्सक्राइबर अब इवेंट प्राप्त नहीं करना चाहता, तो वह disposable.dispose() को कॉल करता है। व्यवहार में, DisposeBag का उपयोग किया जाता है: Disposable का एक संग्रह जो मालिक (जैसे UIViewController) के डीइनिशियलाइज़ेशन पर स्वचालित रूप से सभी सब्सक्रिप्शन रद्द कर देता है। यह मेमोरी लीक को रोकता है जो मैन्युअल सब्सक्रिप्शन प्रबंधन में अपरिहार्य हैं।

Subject प्रकारप्रारंभिक मानसब्सक्राइबर को पुनः भेजता हैउपयोग
PublishSubjectनहींकेवल नए इवेंटUI इवेंट, दुर्लभ सूचनाएं
BehaviorSubjectहाँअंतिम + नएस्थिति, डेटा स्ट्रीम
ReplaySubjectनहींबफर N + नएइतिहास कैशिंग
AsyncSubjectनहींकेवल अंतिमगणनात्मक कार्य
PublishRelayनहींकेवल नएत्रुटि/समाप्ति के बिना

स्ट्रीम रूपांतरण और फ़िल्टरिंग ऑपरेटर

RxSwift में ऑपरेटर ऐसे फ़ंक्शन हैं जो एक Observable लेते हैं और दूसरा Observable लौटाते हैं, डेटा स्ट्रीम को रूपांतरित करते हैं। ऑपरेटरों को संयोजित करके, डेवलपर बिना मध्यवर्ती चर और रेस कंडीशन के घोषणात्मक प्रसंस्करण श्रृंखलाएं बनाता है। सभी ऑपरेटर आलसी हैं: श्रृंखला विवरण के समय बनती है और सब्सक्रिप्शन पर निष्पादित होती है।

रूपांतरण ऑपरेटर स्ट्रीम में प्रत्येक इवेंट को बदलते हैं। map प्रत्येक तत्व पर एक फ़ंक्शन लागू करता है, flatMap प्रत्येक तत्व से Observable को एक समतल स्ट्रीम में खोलता है, scan मध्यवर्ती परिणाम जमा करता है (reduce के समान लेकिन प्रत्येक चरण को उत्सर्जित करता है)। buffer तत्वों को समय या गणना के अनुसार समूहित करता है, window स्ट्रीम को विंडो द्वारा नेस्टेड Observable में विभाजित करता है।

swift
// ऑपरेटर चेन का उदाहरण: debounce के साथ खोज
searchTextField.rx.text
    .orEmpty
    .debounce(.milliseconds(300), scheduler: MainScheduler.instance)
    .distinctUntilChanged()
    .flatMapLatest { query -> Observable<[String]> in
        return apiService.search(query)
    }
    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) { _, item, cell in
        cell.textLabel?.text = item
    }
    .disposed(by: disposeBag)

फ़िल्टरिंग ऑपरेटर केवल उन इवेंट को पास करते हैं जो एक शर्त को पूरा करते हैं। filter विधेय द्वारा फ़िल्टर करता है, distinctUntilChanged केवल पिछले से भिन्न मान पास करता है, take और takeWhile इवेंट की संख्या को सीमित करते हैं। skip और skipWhile पहले N इवेंट या शर्त पूरी होने तक इवेंट को छोड़ते हैं। त्रुटि प्रबंधन के लिए catchError (अवरोधन और प्रतिस्थापन) और retry (त्रुटि पर अनुक्रम पुनः प्रयास) का उपयोग किया जाता है।

संयोजन ऑपरेटर कई Observables को एक में जोड़ते हैं। combineLatest कई स्ट्रीम से नवीनतम मानों को एक टुपल में मर्ज करता है, zip समान अनुक्रमांक वाले तत्वों को जोड़ता है, merge इवेंट आगमन के क्रम में कई स्ट्रीम को एक में जोड़ता है। withLatestFrom मुख्य स्ट्रीम से एक इवेंट को दूसरी स्ट्रीम के नवीनतम मान के साथ जोड़ता है — वर्तमान स्थिति के साथ UI इवेंट के लिए उपयोगी।

श्रेणीऑपरेटरविवरण
रूपांतरणmapप्रत्येक मान को फ़ंक्शन के माध्यम से रूपांतरित करता है
रूपांतरणflatMapनेस्टेड Observables को समतल स्ट्रीम में खोलता है
फ़िल्टरिंगfilterविधेय द्वारा मान पास करता है
फ़िल्टरिंगdistinctUntilChangedकेवल बदले हुए मान पास करता है
संयोजनcombineLatest2+ स्ट्रीम से नवीनतम मानों को जोड़ता है
संयोजनzipअनुक्रमांक द्वारा तत्वों को जोड़ता है
नियंत्रणdebounceस्ट्रीम में विराम तक इवेंट में देरी करता है
नियंत्रणtakeपहले N इवेंट लेता है और स्ट्रीम पूरी करता है

Schedulers और थ्रेड प्रबंधन

RxSwift में Scheduler निष्पादन थ्रेड (या कतार) पर एक अमूर्तता है। Scheduler निर्धारित करता है कि इवेंट निर्माण, रूपांतरण और सब्सक्रिप्शन किस थ्रेड पर निष्पादित होते हैं। GCD के विपरीत, जहां डेवलपर स्पष्ट रूप से DispatchQueue निर्दिष्ट करता है, RxSwift दो पैरामीटर का उपयोग करता है: subscribeOn (किस थ्रेड पर Observable निष्पादित होता है) और observeOn (किस थ्रेड पर सब्सक्राइबर को कॉल किया जाता है)।

MainScheduler और BackgroundScheduler

MainScheduler मुख्य थ्रेड पर कोड निष्पादित करता है — UIKit अपडेट के लिए अनिवार्य (सभी UI परिवर्तन मुख्य थ्रेड पर होने चाहिए)। SerialDispatchQueueScheduler एक सीरियल GCD कतार को लपेटता है, ConcurrentDispatchQueueScheduler एक समवर्ती कतार को। पृष्ठभूमि कार्यों के लिए qos: .background या .utility के साथ ConcurrentDispatchQueueScheduler का उपयोग किया जाता है।

swift
// विशिष्ट पैटर्न: पृष्ठभूमि कार्य + main पर UI
apiService.fetchData()
    .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
    .observeOn(MainScheduler.instance)
    .subscribe(onNext: { data in
        self.tableView.reloadData()
        self.loadingIndicator.stopAnimating()
    })
    .disposed(by: disposeBag)

Scheduler का सही उपयोग नेटवर्क अनुरोधों और भारी गणनाओं के दौरान UI अवरोधन को रोकता है। subscribeOn पूरे अपस्ट्रीम को प्रभावित करता है (observeOn से पहले सभी ऑपरेटर निर्दिष्ट शेड्यूलर पर निष्पादित होते हैं)। observeOn डाउनस्ट्रीम को स्विच करता है — observeOn के बाद सभी ऑपरेटर निर्दिष्ट शेड्यूलर पर निष्पादित होते हैं। एक श्रृंखला में विभिन्न रूपांतरण चरणों में थ्रेड के बीच स्विच करने के लिए कई observeOn हो सकते हैं।

SerialDispatchQueueScheduler इवेंट के अनुक्रमिक प्रसंस्करण की गारंटी देता है, जो साझा संसाधनों की थ्रेड सुरक्षा के लिए महत्वपूर्ण है। उच्च-लोड संचालन (इमेज प्रोसेसिंग, JSON पार्सिंग) के लिए ConcurrentDispatchQueueScheduler का उपयोग करें — RxSwift एक Observable के भीतर इवेंट क्रम को संरक्षित करेगा, लेकिन विभिन्न Observables समानांतर में संसाधित हो सकते हैं।

iOS में RxSwift का व्यावहारिक अनुप्रयोग

RxSwift का उपयोग iOS प्रोजेक्ट्स में अक्सर रिएक्टिव चेन के माध्यम से UI को डेटा से जोड़ने के लिए किया जाता है। RxCocoa सभी मानक UIKit घटकों के लिए rx एक्सटेंशन प्रदान करता है: UIButton के लिए rx.tap, UITextField के लिए rx.text, UIPickerView के लिए rx.selectedRow। यह @IBAction और डेलिगेट्स को छोड़ने, उन्हें घोषणात्मक सब्सक्रिप्शन से बदलने की अनुमति देता है।

MVVM के साथ RxSwift

MVVM (Model-View-ViewModel) एक आर्किटेक्चरल पैटर्न है जिसमें ViewModel स्थिति और व्यावसायिक तर्क का प्रबंधन करता है, और View ViewModel के रिएक्टिव गुणों की सदस्यता लेता है। RxSwift MVVM के साथ पूरी तरह से फिट बैठता है: ViewModel डेटा के लिए Observable या Driver प्रकाशित करता है, View bind के माध्यम से उनकी सदस्यता लेता है। ViewModel के पास View का कोई संदर्भ नहीं है — यह Observable लौटाता है जिसे View उपभोग करता है।

swift
class LoginViewModel {
    let email = BehaviorRelay<String>(value: "")
    let password = BehaviorRelay<String>(value: "")

    var isFormValid: Observable<Bool> {
        return Observable
            .combineLatest(email, password) {
                !$0.isEmpty && $0.contains("@") && $1.count >= 6
            }
    }
}

// ViewController में:
viewModel.isFormValid
    .bind(to: loginButton.rx.isEnabled)
    .disposed(by: disposeBag)

नेटवर्क अनुरोध RxSwift का दूसरा सबसे आम उपयोग मामला है। URLSession.rx.response HTTP अनुरोध को Observable में लपेटता है जो सफलता पर (response, data) या विफलता पर error लौटाता है। Codable और map ऑपरेटर के संयोजन में, एक कॉम्पैक्ट रिएक्टिव API परत प्राप्त होती है: Observable<MyModel> बिना callbacks और प्रत्येक विधि में त्रुटि प्रबंधन के। नेटवर्क त्रुटि पर, retry(3) ऑपरेटर एक्सपोनेंशियल बैकऑफ़ के साथ स्वचालित रूप से तीन बार अनुरोध दोहराता है।

RxSwift बनाम Combine

Combine iOS 13 में पेश किया गया Apple का नेटिव फ्रेमवर्क है। यह RxSwift के समान कार्यों को हल करता है: Publisher, Subscriber और ऑपरेटरों के माध्यम से एसिंक्रोनस इवेंट के साथ काम करना। हालांकि, Combine में प्रमुख अंतर हैं: Failure प्रकार के माध्यम से सख्त त्रुटि टाइपिंग, Swift Concurrency (async/await) के लिए अंतर्निहित समर्थन और @Published और ObservableObject के माध्यम से SwiftUI के साथ एकीकरण।

RxSwift पिछड़े संगतता में जीतता है — यह iOS 8+ का समर्थन करता है, जबकि Combine को iOS 13+ की आवश्यकता है। RxSwift के पास तृतीय-पक्ष एक्सटेंशन (RxDataSources, RxGesture, RxAnimated) का समृद्ध पारिस्थितिकी तंत्र और विस्तृत ऑपरेटर दस्तावेज़ीकरण है। पुराने iOS संस्करणों का समर्थन करने वाली परियोजनाओं के लिए, RxSwift एकमात्र विकल्प बना हुआ है।

iOS 13+ वाली नई परियोजनाओं के लिए, Apple Combine की सिफारिश करता है। यह SwiftUI के साथ कसकर एकीकृत है, इसका बाइनरी आकार छोटा है और आधिकारिक समर्थन है। हालांकि, मौजूदा RxSwift कोड को Combine में माइग्रेट करने के लिए सभी Observable → Publisher को फिर से लिखने की आवश्यकता होती है, और RxCocoa पारिस्थितिकी तंत्र का कोई पूर्ण Combine समकक्ष नहीं है — UIKit में सभी UI घटकों के लिए मूल Publisher नहीं है।

विशेषताRxSwiftCombine
न्यूनतम iOSiOS 8+iOS 13+
त्रुटि प्रकारError (कोई भी)Generic Failure
UI एक्सटेंशनRxCocoa (UIKit, AppKit)@Published (SwiftUI)
ऑपरेटर400+ ऑपरेटर~100 ऑपरेटर
Swift Concurrencyब्रिज के माध्यम सेमूल समर्थन
स्थितितृतीय-पक्षApple आधिकारिक

अक्सर पूछे जाने वाले प्रश्न

RxSwift में Observable और Subject में क्या अंतर है?

Observable आलसी निष्पादन के साथ इवेंट का स्रोत है। Subject एक साथ Observable और Observer है — आप इसकी सदस्यता ले सकते हैं और इसमें मैन्युअल रूप से नए इवेंट भेज सकते हैं। Subject रिएक्टिव चेन में इम्पेरेटिव कोड को एकीकृत करने के लिए उपयोगी है।

Combine के बजाय RxSwift का उपयोग कब करें?

RxSwift को तब चुना जाता है जब iOS 11-12 समर्थन की आवश्यकता हो, मौजूदा RxSwift कोडबेस हो, या समृद्ध ऑपरेटर पारिस्थितिकी तंत्र (Combine में ~100 के मुकाबले 400+) की आवश्यकता हो। iOS 13+ पर नई परियोजनाओं के लिए Combine को प्राथमिकता दी जाती है।

DisposeBag क्या है और इसकी आवश्यकता क्यों है?

DisposeBag Disposable टोकन का एक संग्रह है जो मालिक के डीइनिशियलाइज़ेशन पर स्वचालित रूप से सभी सब्सक्रिप्शन रद्द कर देता है। DisposeBag के बिना, सब्सक्रिप्शन क्लोजर पर एक मजबूत संदर्भ बनाता है, जो UIViewController के नष्ट होने पर मेमोरी लीक का कारण बनता है।

RxSwift में त्रुटियों को कैसे संभालें?

त्रुटि को डिफ़ॉल्ट मान से बदलने के लिए catchError, Observable निष्पादन को पुनः प्रयास करने के लिए retry, त्रुटि को इवेंट में बदलने के लिए materialize का उपयोग करें। UI परत में, Driver और Signal त्रुटियां नहीं भेजते — वे आंतरिक रूप से संभाली जाती हैं।

RxCocoa में Driver, Observable से कैसे अलग है?

Driver एक विशेष Observable प्रकार है जो MainScheduler पर निष्पादन, त्रुटियों की अनुपस्थिति और संसाधन साझाकरण की गारंटी देता है। Driver सुनिश्चित करता है कि UI अपडेट मुख्य थ्रेड पर हों। Observable ऐसी गारंटी नहीं देता — observeOn की आवश्यकता है।

सारांश

  • RxSwift iOS के लिए एक रिएक्टिव प्रोग्रामिंग लाइब्रेरी है जो Observable पैटर्न और 400+ रूपांतरण ऑपरेटरों को लागू करती है
  • Observable, Subject, Disposable तीन मूलभूत प्रकार हैं जो सभी रिएक्टिव श्रृंखलाओं का आधार बनाते हैं
  • ऑपरेटर map, flatMap, filter, combineLatest, debounce बिना रेस कंडीशन के घोषणात्मक श्रृंखलाएं बनाने की अनुमति देते हैं
  • Schedulers (subscribeOn / observeOn) निष्पादन थ्रेड का प्रबंधन करते हैं, UI अवरोधन को रोकते हैं
  • RxCocoa UIKit के लिए rx एक्सटेंशन प्रदान करता है, डेलिगेट्स और target-action को रिएक्टिव सब्सक्रिप्शन से बदलता है
  • Combine iOS 13+ के लिए Apple का मूल विकल्प है, लेकिन RxSwift पुराने संस्करणों के लिए प्रासंगिक बना हुआ है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें