NSNotificationCenter addObserver Swift में: उदाहरणों के साथ पूर्ण गाइड

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

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

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

NSNotificationCenter addObserver Swift में: जीवंत उदाहरणों के साथ पूर्ण मार्गदर्शिका

\n\n

कल्पना करें कि आप पिज़्ज़ा ऑर्डर करने के लिए एक ऐप लिख रहे हैं। उपयोगकर्ता कार्ट स्क्रीन पर "भुगतान करें" दबाता है, और कुछ सेकंड बाद दूसरी स्क्रीन — "ऑर्डर स्थिति" — को स्वचालित रूप से दिखाना चाहिए कि पिज़्ज़ा पहले से ही रास्ते में है। इन दो स्क्रीन को कैसे जोड़ें, बिना कोड को क्लोज़र और डेलिगेट्स के स्पेगेटी में बदले? उत्तर है — NSNotificationCenter (और आधुनिक Swift में बस NotificationCenter)।

\n\n

यह पैटर्न iOS डेवलपमेंट में सबसे लोकप्रिय में से एक है। Stack Overflow पर प्रश्न "NSNotificationCenter addObserver in Swift" हज़ारों बार देखा जाता है, क्योंकि अनुभवी डेवलपर भी कभी-कभी सिंटैक्स, मेमोरी प्रबंधन और ऑब्ज़र्वर हटाने में भ्रमित हो जाते हैं। आइए एक बार और हमेशा के लिए समझें कि Swift में सूचनाओं का सही तरीके से उपयोग कैसे करें।

\n\n

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

\n\n

NotificationCenter iOS का एक अंतर्निहित तंत्र है जो "ऑब्ज़र्वर" (Observer) पैटर्न को लागू करता है। यह कुछ ऑब्जेक्ट्स (पोस्टर्स) को संदेश भेजने की अनुमति देता है, और दूसरों (ऑब्ज़र्वर्स) को इन संदेशों की सदस्यता लेने और उन पर प्रतिक्रिया देने की अनुमति देता है। मुख्य लाभ — कमजोर जुड़ाव: भेजने वाला और प्राप्त करने वाला एक दूसरे के बारे में कुछ नहीं जानते।

\n\n

यह कब उपयोगी है:

\n
    \n
  • दूसरी स्क्रीन पर कार्रवाई के बारे में एक स्क्रीन को सूचित करना (उदाहरण: कार्ट → ऑर्डर स्थिति)
  • \n
  • सिस्टम घटनाओं पर प्रतिक्रिया (कीबोर्ड दिखाई दिया, ऐप बैकग्राउंड में चला गया)
  • \n
  • पृष्ठभूमि डेटा लोडिंग पूरी होने के बाद UI अपडेट करना
  • \n
\n\n

पुराने प्रोजेक्ट्स (Objective-C) में NSNotificationCenter का उपयोग किया जाता था, Swift में iOS 9 से इसे बस NotificationCenter कहा जाता है। इस लेख में हम आधुनिक Swift सिंटैक्स का उपयोग करेंगे।

\n\n

सूचना की सदस्यता कैसे लें: addObserver

\n\n

विधि addObserver सिस्टम का हृदय है। यह किसी ऑब्जेक्ट को किसी विशिष्ट सूचना के ऑब्ज़र्वर के रूप में पंजीकृत करता है। दो मुख्य तरीके हैं: सेलेक्टर के माध्यम से (क्लासिक) और ब्लॉक (क्लोज़र) के माध्यम से।

\n\n

1. सेलेक्टर के साथ addObserver विधि (target-action)

\n\n

यह तरीका Objective-C से आया है। आप ऑब्ज़र्वर ऑब्जेक्ट, सेलेक्टर (वह विधि जो कॉल की जाएगी), सूचना का नाम और वैकल्पिक रूप से भेजने वाला ऑब्जेक्ट निर्दिष्ट करते हैं।

\n\n
import UIKit\n\nclass OrderStatusViewController: UIViewController {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        // भुगतान सूचना की सदस्यता लें\n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(didReceivePaymentNotification(_:)),\n            name: Notification.Name("PaymentDidSucceed"),\n            object: nil\n        )\n    }\n    \n    @objc func didReceivePaymentNotification(_ notification: Notification) {\n        print("भुगतान सफल! ऑर्डर स्थिति अपडेट कर रहे हैं।")\n        // यहाँ UI अपडेट करें\n    }\n    \n    // महत्वपूर्ण: सदस्यता रद्द करना न भूलें!\n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n}
\n\n

यहाँ क्या महत्वपूर्ण है:

\n
    \n
  • हैंडलर विधि को @objc से चिह्नित किया जाना चाहिए — यह Objective-C runtime की आवश्यकता है।
  • \n
  • Notification प्रकार का पैरामीटर notification में userInfo होता है — अतिरिक्त डेटा वाला एक शब्दकोश।
  • \n
  • यदि object: nil पास किया जाता है, तो ऑब्ज़र्वर किसी भी भेजने वाले से सूचनाएँ प्राप्त करेगा।
  • \n
\n\n

2. क्लोज़र के साथ addObserver विधि (iOS 9+)

\n\n

आधुनिक और अधिक सुरक्षित तरीका — ब्लॉक का उपयोग करना। इसे @objc की आवश्यकता नहीं है और यह बाहरी चर को कैप्चर करने की अनुमति देता है।

\n\n
class PaymentManager {\n    \n    private var observer: NSObjectProtocol?\n    \n    func startObservingPayment() {\n        observer = NotificationCenter.default.addObserver(\n            forName: Notification.Name("PaymentDidSucceed"),\n                

ब्लॉग

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