Swift में इवेंट-ड्रिवन आर्किटेक्चर: कोड को इवेंट के ऑर्केस्ट्रा में बदलना

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

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

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

आपके Swift एप्लिकेशन को इवेंट-ड्रिवन आर्किटेक्चर की आवश्यकता क्यों है?

\n\n

कल्पना करें कि आप एक ऑर्केस्ट्रा के संचालक हैं। प्रत्येक संगीतकार सही समय पर अपनी भूमिका निभाने के लिए अपनी बारी का इंतजार करता है। यदि सभी वायलिन वादक एक साथ बजाना शुरू कर दें, तो अराजकता फैल जाएगी। लगभग इसी तरह Swift में इवेंट-ड्रिवन आर्किटेक्चर काम करता है: प्रत्येक मॉड्यूल केवल विशिष्ट इवेंट पर प्रतिक्रिया करता है, न कि सीधे अन्य मॉड्यूल को खींचता है।

\n\n

जब मैंने पहली बार एक व्यावसायिक प्रोजेक्ट में Swift में इवेंट-ओरिएंटेड प्रोग्रामिंग का सामना किया, तो मुझे एहसास हुआ कि यह कितना शक्तिशाली उपकरण है। एक फूड डिलीवरी एप्लिकेशन: उपयोगकर्ता ने "ऑर्डर करें" बटन दबाया - यह एक इवेंट है। कार्ट अपडेट हुआ - यह एक इवेंट है। कूरियर के बारे में push आया - यह एक इवेंट है। प्रत्येक मॉड्यूल (UI, नेटवर्क, लोकल DB) बस आवश्यक इवेंट की सदस्यता लेता है और स्वतंत्र रूप से काम करता है। यही इवेंट-ड्रिवन आर्किटेक्चर है।

\n\n

इस लेख में, हम Swift इवेंट आर्किटेक्चर को लागू करने के तीन तरीकों पर चर्चा करेंगे: क्लासिक डेलिगेट, NotificationCenter और कस्टम इवेंट बस। आप वास्तविक कोड देखेंगे, समझेंगे कि कब क्या उपयोग करना है, और इसे तुरंत अपने प्रोजेक्ट में लागू कर सकेंगे। चलिए शुरू करते हैं!

\n\n

Swift में इवेंट-ड्रिवन दृष्टिकोण की मूल बातें

\n\n

Swift के संदर्भ में इवेंट क्या है?

\n\n

इवेंट एक संकेत है कि कुछ हुआ है। यह हो सकता है:

\n
    \n
  • उपयोगकर्ता इनपुट (बटन दबाया गया, टेक्स्ट बदला गया)
  • \n
  • डेटा में परिवर्तन (सर्वर से डेटा आया, DB अपडेट हुआ)
  • \n
  • सिस्टम सूचनाएं (एप्लिकेशन बैकग्राउंड में चला गया, कीबोर्ड दिखाई दिया)
  • \n
\n\n

Swift में इवेंट-ड्रिवन आर्किटेक्चर का मुख्य सिद्धांत कमजोर युग्मन (loose coupling) है। इवेंट भेजने वाला नहीं जानता कि इसे कौन संभालेगा। प्राप्तकर्ता नहीं जानता कि इसे किसने भेजा। वे इवेंट बस के माध्यम से संवाद करते हैं - यह कोड को लचीला और परीक्षण योग्य बनाता है।

\n\n

Observer पैटर्न - इवेंट की नींव

\n\n

Swift में Observer पैटर्न किसी भी इवेंट-ड्रिवन सिस्टम का आधार है। हमारे पास एक प्रकाशक (Publisher) ऑब्जेक्ट और कई सब्सक्राइबर (Subscribers) होते हैं। जब प्रकाशक अपनी स्थिति बदलता है, तो वह सभी सब्सक्राइबर को सूचित करता है।

\n\n

Swift में इसके लिए कई अंतर्निहित तंत्र हैं:

\n
    \n
  • NotificationCenter - iOS SDK में वैश्विक इवेंट बस
  • \n
  • डेलिगेट - एक-से-एक, लेकिन नियंत्रण के साथ
  • \n
  • Combine - Apple का रिएक्टिव फ्रेमवर्क (iOS 13+)
  • \n
  • कस्टम कार्यान्वयन - व्यवहार पर पूर्ण नियंत्रण
  • \n
\n\n

आइए प्रत्येक दृष्टिकोण को उदाहरणों के साथ समझते हैं।

\n\n

तरीका 1. डेलिगेट: शैली का क्लासिक

\n\n

Swift में डेलिगेट इवेंट को लागू करने का सबसे सरल तरीका है। यह "एक-से-एक" संबंधों के लिए उपयुक्त है, जब एक ऑब्जेक्ट दूसरे को अपनी स्थिति के बारे में सूचित करता है।

\n\n

उदाहरण: कल्पना करें कि हमारे पास एक इमेज लोडर है जिसे कंट्रोलर को पूरा होने की सूचना देनी है।

\n\n
// 1. डेलिगेट प्रोटोकॉल को परिभाषित करें\nprotocol ImageLoaderDelegate: AnyObject {\n    func imageLoader(_ loader: ImageLoader, didLoad image: UIImage)\n    func imageLoader(_ loader: ImageLoader, didFailWith error: Error)\n}\n\n// 2. प्रकाशक वर्ग\nclass ImageLoader {\n    weak var delegate: ImageLoaderDelegate?\n\n    func loadImage(from url: URL) {\n        URLSession.shared.dataTask(with: url) { [weak self] data, _, error in\n            DispatchQueue.main.async {\n                if let error = error {\n                    self?.delegate?.imageLoader(self!, didFailWith: error)\n                } else if let data = data, let image = UIImage(data: data) {\n                    self?.delegate?.imageLoader(self!, didLoad: image)\n                }\n            }\n        }.resume()\n    }\n}\n\n// 3. सब्सक्राइबर कंट्रोलर\nclass ViewController: UIViewController, ImageLoaderDelegate {\n    let loader = ImageLoader()\n    @IBOutlet weak var imageView: UIImageView!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        lo                

ब्लॉग

पुस्तक अनुशंसाएँ