Swift Academy · पाठ

ऑब्ज़र्वर पैटर्न के विकल्प

डेलीगेट और Combine पब्लिशर के साथ तुलना कीजिए।

पाठ 4, कुल 4 में से13 चरण

ऑब्ज़र्वर पैटर्न के विकल्प, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

ऑब्ज़र्वर प्रतिरूप के विकल्प

घटनाओं पर प्रतिक्रिया देने का NotificationCenter एक तरीका है। स्विफ्ट में अन्य तरीके भी हैं: प्रतिनिधि-पद्धति, कम्बाइन और असिंक धाराएँ। प्रत्येक संचार के अलग रूप के लिए उपयुक्त है।

ऑब्ज़र्वर प्रतिरूप

ऑब्ज़र्वर प्रतिरूप वस्तुओं को किसी विषय से आने वाली घटनाओं की सदस्यता लेने देता है। NotificationCenter इसका वैश्विक और ढीले रूप से जुड़े हुए रूप में कार्यान्वयन है।

import Foundation

// Subject posts, observers react, neither holds the other.
NotificationCenter.default.post(name: Notification.Name("tick"), object: nil)
print("Broadcast an event")

प्रतिनिधि-पद्धति

एक delegate एक-से-एक संबंध होता है: कोई वस्तु किसी प्रोटोकॉल के माध्यम से विशिष्ट घटनाएँ एक ही delegate को भेजती है। यह स्पष्ट और प्रकार-सुरक्षित होता है।

protocol DownloadDelegate: AnyObject {
    func didFinish(_ bytes: Int)
}
class Downloader {
    weak var delegate: DownloadDelegate?
    func finish() { delegate?.didFinish(1024) }
}
print("Delegate is one-to-one and typed")

Delegate बनाम सूचना

जब ठीक एक वस्तु की रुचि हो और संबंध स्पष्ट हो, तब delegate का उपयोग करें। जब कई अज्ञात ऑब्ज़र्वर प्रतिक्रिया दे सकते हों, तब NotificationCenter का उपयोग करें।

import Foundation

// One listener -> delegate. Many/unknown listeners -> NotificationCenter.
print("Cardinality guides the choice")

कम्बाइन प्रकाशक

कम्बाइन घटनाओं को प्रकाशकों के रूप में मॉडल करता है, जिनकी सदस्यता आप sink से लेते हैं। यह map और filter जैसे रूपांतरण ऑपरेटरों का समर्थन करता है।

import Combine

let subject = PassthroughSubject<Int, Never>()
let c = subject.sink { print("Got \($0)") }
subject.send(5)
_ = c

NotificationCenter प्रकाशक

कम्बाइन, NotificationCenter को जोड़ता है: publisher(for:) सूचनाओं को ऐसी धारा में बदलता है, जिसे आप रूपांतरित कर सकते हैं।

import Foundation
import Combine

let name = Notification.Name("ping")
let c = NotificationCenter.default.publisher(for: name)
    .sink { _ in print("Combine got notification") }
NotificationCenter.default.post(name: name, object: nil)
_ = c

कम्बाइन ऑपरेटर

कम्बाइन की ताकत घटना-कार्यप्रवाहों को संयोजित करने में है: घोषणात्मक रूप से फ़िल्टर करें, डिबाउंस करें, संयोजित करें और मानचित्रित करें।

import Combine

let subject = PassthroughSubject<Int, Never>()
let c = subject
    .filter { $0 > 0 }
    .map { $0 * 2 }
    .sink { print($0) }
subject.send(-1)
subject.send(3)
_ = c

असिंक अनुक्रम

आधुनिक स्विफ्ट AsyncStream और सूचना के असिंक अनुक्रम उपलब्ध कराता है, जिससे आप संरचित समवर्तीता में for await के साथ घटनाओं का उपभोग कर सकते हैं।

import Foundation

func listen() async {
    let name = Notification.Name("ping")
    for await _ in NotificationCenter.default.notifications(named: name) {
        print("Async observed")
        break
    }
}
print("Can await notifications")

क्लोज़र और कॉलबैक

एकल, स्थानीय कॉलबैक के लिए संग्रहीत क्लोज़र सबसे सरल होता है और इसमें ऑब्ज़र्वर की किसी व्यवस्था की आवश्यकता नहीं होती।

struct Button {
    var onTap: () -> Void
    func tap() { onTap() }
}
Button(onTap: { print("tapped") }).tap()

दृष्टिकोण चुनना

प्रतिनिधि: एक-से-एक, स्पष्ट। NotificationCenter: अनेक-से-अनेक, अलग-अलग जुड़े हुए। कम्बाइन/असिंक: रूपांतरण की आवश्यकता वाली धाराएँ। क्लोज़र: सरल स्थानीय कॉलबैक।

import Foundation

// Match the tool to the communication shape.
print("Delegate, Notification, Combine, async, closure")

समझौते

NotificationCenter लचीला है, लेकिन इसमें प्रकार की जानकारी नहीं होती और संसाधन लीक होना आसान है। प्रतिनिधि-पद्धति और कम्बाइन प्रकार-सुरक्षित हैं; कम्बाइन और असिंक अधिक अवधारणाओं की कीमत पर अतिरिक्त शक्ति देते हैं।

import Foundation

// Prefer typed approaches when the relationship is known.
print("Type safety vs flexibility tradeoff")

त्वरित जाँच

स्पष्ट, एक-से-एक और प्रकार-सुरक्षित संबंध के लिए कौन-सी व्यवस्था सबसे अच्छी है?

पुनरावलोकन

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

शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

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

क्या “ऑब्ज़र्वर पैटर्न के विकल्प” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “ऑब्ज़र्वर पैटर्न के विकल्प” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“ऑब्ज़र्वर पैटर्न के विकल्प” में मैं क्या सीखूँगा?

डेलीगेट और Combine पब्लिशर के साथ तुलना कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“ऑब्ज़र्वर पैटर्न के विकल्प” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. नोटिफ़िकेशन पोस्ट करना और देखना
  2. नोटिफ़िकेशन userInfo पेलोड
  3. ऑब्ज़र्वर सुरक्षित रूप से हटाना
  4. ऑब्ज़र्वर पैटर्न के विकल्प
← Swift Academy पर वापस जाएँ