RxSwift Swift के लिए एक रिएक्टिव प्रोग्रामिंग लाइब्रेरी है जो Observable पैटर्न को लागू करती है। ReactiveX, 2025 के अनुसार, यह Apple इकोसिस्टम के लिए Reactive Extensions का सबसे लोकप्रिय कार्यान्वयन है। Observable घटनाओं के स्रोत के रूप में कार्य करता है, जबकि Observer उन्हें प्राप्त करने के लिए सब्सक्राइब करता है।
मुख्य बिंदु
RxSwift Swift भाषा के लिए एक रिएक्टिव प्रोग्रामिंग लाइब्रेरी है, जो Reactive Extensions (Rx) से पोर्ट की गई है। यह Observable Sequence के माध्यम से एसिंक्रोनस और इवेंट-संचालित प्रोग्राम का वर्णन करने की अनुमति देती है — समय के साथ उपलब्ध डेटा का एक अनुक्रम। iOS डेवलपर्स RxSwift का उपयोग नेटवर्क अनुरोधों, UI घटनाओं और स्ट्रीमिंग डेटा को बिना नेस्टेड कॉलबैक के संभालने के लिए करते हैं।
RxSwift का आधार दो प्रमुख प्रोटोकॉल हैं: ObservableType — घटनाओं का स्रोत जो तीन प्रकार के सिग्नल जारी कर सकता है: .next(value), .error(error) और .completed। Observer subscribe विधि के माध्यम से Observable की सदस्यता लेता है और ये घटनाएँ प्राप्त करता है। इस मॉडल को Reactive Streams कहा जाता है और यह गारंटी देता है कि सही सब्सक्रिप्शन पर कोई घटना नहीं खोती।
RxSwift स्ट्रीम के साथ काम करने के लिए 300 से अधिक ऑपरेटर प्रदान करता है: map प्रत्येक घटना को रूपांतरित करता है, filter केवल मेल खाने वाली घटनाओं को पास करता है, flatMap नेस्टेड Observable को एकल स्ट्रीम में खोलता है। ऑपरेटर श्रृंखलाओं में जुड़ते हैं, बिना साइड इफेक्ट के डेटा प्रोसेसिंग का एक घोषणात्मक पाइपलाइन बनाते हैं।
मूल Observable के अलावा, RxSwift विशेष रैपर प्रकार प्रदान करता है। Single ठीक एक मान या त्रुटि जारी करता है — HTTP अनुरोधों के लिए आदर्श। Completable बिना मान के सफलता या विफलता के साथ पूरा होता है — लेखन संचालन के लिए। Maybe दोनों परिदृश्यों को जोड़ता है: मान के साथ, बिना मान के या त्रुटि के साथ पूरा हो सकता है। ये Traits शब्दार्थ को सरल बनाते हैं और कोड को स्व-दस्तावेजी बनाते हैं।
RxSwift में रिएक्टिव प्रोग्रामिंग Observer पैटर्न पर बनी है। ObservableSequence मानक लाइब्रेरी के Sequence के समान है, लेकिन तत्वों तक एसिंक्रोनस पहुँच के साथ। घटनाओं की स्ट्रीम ऑपरेटरों की श्रृंखला के माध्यम से पारित की जाती है, प्रत्येक मूल को बदले बिना एक नई ObservableSequence लौटाता है।
RxSwift में ऑपरेटर शुद्ध फ़ंक्शन हैं जो एक ObservableSequence लेते हैं और एक नई लौटाते हैं। उदाहरण के लिए, map प्रत्येक तत्व पर रूपांतरण लागू करके एक नया अनुक्रम बनाता है। ऑपरेटरों को संयोजित करके, डेवलपर एक पाइपलाइन बनाता है जहाँ डेटा बिना मध्यवर्ती चर के सभी प्रसंस्करण चरणों से गुज़रता है।
Schedulers RxSwift में निष्पादन थ्रेड पर एक अमूर्तता है। Scheduler यह निर्धारित करता है कि कोड किस थ्रेड पर निष्पादित होगा: MainScheduler — UI थ्रेड, SerialDispatchQueueScheduler — पृष्ठभूमि कतार। ऑपरेटर subscribeOn और observeOn यह निर्दिष्ट करते हैं कि कार्य कहाँ किया जाता है और परिणाम कहाँ संसाधित किए जाते हैं।
RxSwift में कई मूल प्रकार शामिल हैं, प्रत्येक रिएक्टिव पाइपलाइन में अपना कार्य हल करता है। Single एक Observable है जो ठीक एक मान या त्रुटि जारी करता है, नेटवर्क अनुरोधों के लिए सुविधाजनक। Completable बिना मान के सफलता या विफलता के साथ पूरा होता है। Maybe Single और Completable के गुणों को जोड़ता है।
Subject एक हॉट Observable है जो Observer के रूप में भी कार्य करता है। PublishSubject केवल नई घटनाओं को सब्सक्राइबर्स को जारी करता है, BehaviorSubject — अंतिम घटना और नई घटनाएँ। Relay Subject का एक प्रकार है जो .error या .completed जारी नहीं करता, स्ट्रीम की निरंतरता सुनिश्चित करता है। BehaviorRelay वर्तमान मान संग्रहीत करता है और State-driven UI के लिए उपयुक्त है।
DisposeBag Disposable का एक संग्रह है जो अपने डीलोकेशन पर सभी सब्सक्रिप्शन को स्वचालित रूप से रद्द करता है। iOS में, DisposeBag आमतौर पर UIViewController या UIView में जोड़ा जाता है। जब स्क्रीन बंद होती है, DisposeBag साफ़ हो जाता है — यह मेमोरी लीक और गैर-मौजूद UI तत्वों तक पहुँच को रोकता है।
नीचे स्ट्रिंग को रूपांतरित करने के लिए map ऑपरेटर का उपयोग करके डेटा की एक सरणी से Observable बनाने का उदाहरण दिया गया है:
let observable = Observable.of("Swift", "RxSwift", "Reactive")
observable
.map { $0.uppercased() }
.subscribe(onNext: { value in
print("Received: \(value)")
})
.disposed(by: disposeBag)
दूसरा उदाहरण zip का उपयोग करके दो नेटवर्क अनुरोधों के संयोजन को प्रदर्शित करता है — ऑपरेटर तब तक प्रतीक्षा करता है जब तक दोनों Observable एक मान जारी न करें और परिणामों को एक tuple में जोड़ता है:
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 पैटर्न के लिए आदर्श है।
let state = BehaviorRelay(value: "idle")
state
.subscribe(onNext: { status in
print("Status: \(status)")
})
.disposed(by: disposeBag)
state.accept("loading") // Prints: Status: loading
RxSwift पारंपरिक एसिंक्रोनस विधियों (Delegation, NotificationCenter, Callback) से अपनी घोषणात्मक प्रकृति और संयोजनीयता में भिन्न है। Combine के विपरीत, RxSwift iOS 9+ का समर्थन करता है और इसमें अधिक ऑपरेटर हैं। हालाँकि, Combine Foundation और SwiftUI में भाषा स्तर पर एकीकृत है, जो इसे नए Apple प्रोजेक्ट्स में लाभ देता है।
GCD (Grand Central Dispatch) पर RxSwift का मुख्य लाभ कतारों को मैन्युअल रूप से प्रबंधित करने के बजाय अमूर्तता स्तर पर डेटा स्ट्रीम को संयोजित और रूपांतरित करने की क्षमता है। हालाँकि, RxSwift को रिएक्टिव अवधारणाओं को सीखने की आवश्यकता होती है, जो टीम के लिए प्रवेश सीमा बढ़ाता है।
व्यवहार में, RxSwift का उपयोग बड़े प्रोजेक्ट्स में किया जाता है जहाँ रिएक्टिव श्रृंखलाएँ UI घटनाओं, व्यावसायिक तर्क और नेटवर्क इंटरैक्शन को एक ही पाइपलाइन में जोड़ती हैं। उदाहरण के लिए, ट्रेडिंग एप्लिकेशन में, कोट स्ट्रीम को RxSwift के माध्यम से संसाधित किया जाता है: टिक 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 कोड लिखते समय, प्रति सब्सक्रिप्शन एकल Observable के सिद्धांत का पालन करना महत्वपूर्ण है: प्रत्येक ViewController को एक ही Observable में एक से अधिक सब्सक्रिप्शन नहीं बनाना चाहिए — यह रेस कंडीशन के जोखिम को कम करता है। Observable की मेमोइज़ेशन के लिए share() ऑपरेटर का उपयोग किया जाता है, जो एक कोल्ड Observable को 1 के replay बफर के साथ हॉट में बदलता है। साझा संसाधनों के साथ काम करते समय, उत्सर्जन शुरू करने के लिए connect() का उपयोग करें — यह गारंटी देता है कि सभी सब्सक्राइबर पहली घटना से पहले जुड़ें।
RxSwift कोड का परीक्षण TestScheduler के माध्यम से किया जाता है — एक वर्चुअल Scheduler जो समय प्रबंधित करने की अनुमति देता है। testScheduler.createHotObservable(values) वर्चुअल समय द्वारा घटनाओं के पूर्वनिर्धारित अनुक्रम के साथ एक Observable बनाता है। testScheduler.start() प्रसंस्करण शुरू करता है। TestScheduler यह जाँचने की अनुमति देता है कि बिना वास्तविक देरी के किस क्रम और किस वर्चुअल टाइमस्टैम्प पर घटनाएँ होती हैं, जिससे परीक्षण तेज़ और नियतात्मक हो जाते हैं।
अक्सर पूछे जाने वाले प्रश्न
Observable एक कोल्ड स्रोत है: यह सब्सक्रिप्शन तक घटनाएँ जारी नहीं करता। Subject हॉट है: यह सब्सक्राइबर्स की परवाह किए बिना घटनाएँ जारी करता है और onNext के माध्यम से मैन्युअल रूप से मान डालने की अनुमति देता है। PublishSubject केवल नई घटनाएँ पास करता है, BehaviorSubject — अंतिम घटना और नई घटनाएँ।
DisposeBag सभी Disposable सब्सक्रिप्शन संग्रहीत करता है। जब DisposeBag डीलोकेट होता है (उदाहरण के लिए, ViewController बंद करने पर), सभी संग्रहीत सब्सक्रिप्शन स्वचालित रूप से रद्द हो जाते हैं। यह गारंटी देता है कि Observable नष्ट UI ऑब्जेक्ट को कोई घटना नहीं भेजेगा।
यदि न्यूनतम iOS संस्करण 13+ है और टीम SwiftUI जानती है — Combine चुनें। यदि प्रोजेक्ट iOS 12 और उससे नीचे का समर्थन करता है या अधिक ऑपरेटरों की आवश्यकता है — RxSwift चुनें। Combine Foundation (URLSession, Timer, NotificationCenter) के साथ बेहतर एकीकरण प्रदान करता है।
Schedulers निष्पादन थ्रेड को अमूर्त करते हैं। subscribeOn निर्दिष्ट करता है कि सब्सक्रिप्शन किस Scheduler पर किया जाता है (आमतौर पर पृष्ठभूमि में)। observeOn निर्धारित करता है कि घटनाएँ किस Scheduler पर प्राप्त की जाती हैं (अक्सर UI अपडेट के लिए MainScheduler)। SerialDispatchQueueScheduler GCD के माध्यम से काम करता है।
हाँ, RxSwift को ObservableObject के माध्यम से SwiftUI के साथ एकीकृत किया जा सकता है। BehaviorRelay को @Published गुणों के रूप में उपयोग करें: Relay की सब्सक्रिप्शन Combine में परिवर्तन प्रसारित करती है, और SwiftUI @ObservedObject के माध्यम से View को फिर से रेंडर करता है। यह UIKit से SwiftUI में माइग्रेशन का एक लोकप्रिय पैटर्न है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें