स्विफ्ट में रिएक्टिव प्रोग्रामिंग: iOS/macOS के लिए Combine और RxSwift

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

स्विफ्ट (iOS/macOS) में रिएक्टिव प्रोग्रामिंग: Combine और RxSwift

रिएक्टिव प्रोग्रामिंग एक प्रतिमान है जो एसिंक्रोनस डेटा स्ट्रीम और परिवर्तनों के प्रसार पर आधारित है। Apple के iOS और macOS इकोसिस्टम में, मुख्य उपकरण नेटिव फ्रेमवर्क Combine (iOS 13/macOS 10.15 से) और थर्ड-पार्टी लाइब्रेरी RxSwift हैं। दोनों ही डिक्लेरेटिव, संक्षिप्त और आसानी से परीक्षण योग्य कोड लिखने की अनुमति देते हैं, डेवलपर को "callback hell" और जटिल स्थिति प्रबंधन से मुक्त करते हैं।



मूल अवधारणाएँ

  • Publisher (प्रकाशक) — डेटा का स्रोत जो मान, समाप्ति या त्रुटि भेज सकता है।
  • Subscriber (सब्सक्राइबर) — Publisher से डेटा प्राप्त करता है और उस पर प्रतिक्रिया करता है।
  • Operator (ऑपरेटर) — स्ट्रीम को बदलने वाला फंक्शन (map, filter, combineLatest, debounce आदि)।
  • Subject — एक हाइब्रिड जो इवेंट प्राप्त और भेज दोनों कर सकता है (PassthroughSubject, CurrentValueSubject)।
  • Scheduler (शेड्यूलर) — यह निर्धारित करता है कि कोड किस थ्रेड पर निष्पादित होगा।


Combine: Apple का नेटिव फ्रेमवर्क

Combine Foundation में निर्मित है और Publisher और Subscriber के साथ काम करता है। टेक्स्ट फील्ड को संसाधित करने का उदाहरण:

import Combineimport UIKit

class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! @IBOutlet weak var label: UILabel! private var cancellables = Set<AnyCancellable>()

override func viewDidLoad() { super.viewDidLoad() // NotificationCenter से Publisher बनाएँ let publisher = NotificationCenter.default .publisher(for: UITextField.textDidChangeNotification, object: textField) .compactMap { ($0.object as? UITextField)?.text } .debounce(for: .milliseconds(500), scheduler: RunLoop.main) .removeDuplicates() // सब्सक्राइब करें publisher .sink { [weak self] value in self?.label.text = "आपने दर्ज किया: \\(value)" } .store(in: &cancellables) }}

उदाहरण में इनपुट पर प्रतिक्रिया में देरी के लिए debounce और डुप्लिकेट मानों को अनदेखा करने के लिए removeDuplicates का उपयोग किया गया है।



RxSwift: एक शक्तिशाली विकल्प

RxSwift Swift के लिए ReactiveX का पोर्ट है। यह ऑपरेटरों का एक व्यापक सेट प्रदान करता है और iOS के पुराने संस्करणों का समर्थन करता है। RxSwift के साथ वही उदाहरण:

import RxSwiftimport RxCocoa

class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! @IBOutlet weak var label: UILabel! private let disposeBag = DisposeBag()

override func viewDidLoad() { super.viewDidLoad() textField.rx.text .orEmpty .debounce(.milliseconds(500), scheduler: MainScheduler.instance) .distinctUntilChanged() .subscribe(onNext: { [weak self] text in self?.label.text = "आपने दर्ज किया: \\(text)" }) .disposed(by: disposeBag) }}

rx.text (RxCocoa के माध्यम से) और distinctUntilChanged() के उपयोग पर ध्यान दें — Combine में removeDuplicates का एनालॉग।



मुख्य ऑपरेटर

अनुशंसाएँ