Protocol — यह क्या है, iOS में प्रोटोकॉल और डेलीगेट

लेखक: IT Sectr प्रकाशित: 2026-02-18 पढ़ने का समय: 10 मिनट

Protocol आवश्यकताओं (गुणों और विधियों) का एक सेट है जिसे प्रोटोकॉल को अपनाने वाले प्रकार को पूरा करना होता है। Swift में, प्रोटोकॉल Protocol-Oriented Programming (POP) के केंद्रीय तत्व हैं, जो बिना इनहेरिटेंस के पॉलिमॉर्फ़िज़्म को सक्षम करते हैं। Swift.org (2025) के अनुसार, Swift मानक लाइब्रेरी के 85% प्रकारों में प्रोटोकॉल का उपयोग किया जाता है। Objective-C में, @protocol समान भूमिका निभाता है, लेकिन एक सीमा के साथ — केवल कक्षाओं के लिए।

मुख्य बातें

  • Protocol — एक अनुबंध जो इंटरफ़ेस को परिभाषित करता है जिसे संरचना, वर्ग या गणना को लागू करना होता है
  • Protocol-Oriented Programming — Swift प्रतिमान जहाँ प्रोटोकॉल और प्रोटोकॉल एक्सटेंशन गहरी इनहेरिटेंस पदानुक्रम को बदल देते हैं
  • Protocol extension — डिफ़ॉल्ट विधि कार्यान्वयन, @objc के बिना प्रोटोकॉल विधियों को वैकल्पिक बनाता है
  • Associated types — विभिन्न डेटा प्रकारों के साथ टाइप-सुरक्षित कार्य के लिए संबद्ध प्रकारों वाले सामान्यीकृत प्रोटोकॉल
  • Protocol composition — सटीक आवश्यकता विनिर्देश के लिए & ऑपरेटर के माध्यम से कई प्रोटोकॉल का संयोजन

Swift में प्रोटोकॉल क्या है?

Protocol Swift में एक अमूर्त इंटरफ़ेस है जो उन आवश्यकताओं को परिभाषित करता है जिन्हें एक प्रकार को पूरा करना चाहिए। एक प्रोटोकॉल गुण (getter/setter के साथ), विधियाँ (इंस्टेंस और टाइप), इनिशियलाइज़र और सबस्क्रिप्ट की आवश्यकता हो सकती है। कक्षाओं के विपरीत, प्रोटोकॉल को संरचनाओं, गणनाओं और कक्षाओं द्वारा अपनाया जा सकता है — जो विशुद्ध रूप से वर्ग-आधारित भाषाओं में अनुपलब्ध लचीलापन प्रदान करता है।

Swift
protocol Drawable {
    var boundingRect: CGRect { get }
    mutating func draw(in context: CGContext)
}

struct Circle: Drawable {
    var center: CGPoint
    var radius: CGFloat
    
    var boundingRect: CGRect {
        CGRect(x: center.x - radius, y: center.y - radius,
               width: radius * 2, height: radius * 2)
    }
    
    func draw(in context: CGContext) {
        context.addEllipse(in: boundingRect)
    }
}

Circle संरचना Drawable प्रोटोकॉल को अपनाती है, जो boundingRect गुण और draw(in:) विधि प्रदान करती है। प्रोटोकॉल के लिए धन्यवाद, Drawable को लागू करने वाली किसी भी आकृति को समान रूप से संभाला जा सकता है — यह एक सामान्य आधार वर्ग से इनहेरिट किए बिना पॉलिमॉर्फ़िज़्म है।

Protocol-Oriented Programming: Swift प्रतिमान

Protocol-Oriented Programming (POP) एक प्रतिमान है जिसे Apple ने WWDC 2015 में वर्ग-आधारित इनहेरिटेंस के विकल्प के रूप में पेश किया था। POP में, प्रोटोकॉल मुख्य अमूर्तन उपकरण हैं और प्रोटोकॉल एक्सटेंशन डिफ़ॉल्ट कार्यान्वयन प्रदान करते हैं। यह «हीरा इनहेरिटेंस» समस्या को हल करता है और स्रोत कोड को संशोधित किए बिना मौजूदा प्रकारों का विस्तार करने की अनुमति देता है।

पहलूPOP (प्रोटोकॉल-उन्मुख)OOP (वर्ग-आधारित)
अमूर्तन इकाईProtocolआधार वर्ग
पुन: उपयोग तंत्रProtocol extensionइनहेरिटेंस
मान प्रकारसमर्थित (struct)केवल संदर्भ प्रकार
एकाधिक अपनानाProtocol compositionएकाधिक इनहेरिटेंस (Swift में नहीं)
युग्मन जोखिमनिम्न (ढीला युग्मन)उच्च (कठोर पदानुक्रम)

Apple Swift ब्लॉग (2025) के अनुसार, आधुनिक Swift अनुप्रयोगों में 70% प्रकार संरचनाएँ हैं। POP इस बदलाव का एक मुख्य कारण है: प्रोटोकॉल संरचनाओं को कक्षाओं में स्विच किए बिना पॉलिमॉर्फ़िक व्यवहार प्राप्त करने की अनुमति देते हैं।

Protocol बनाम abstract class बनाम interface

Swift प्रोटोकॉल Java इंटरफ़ेस और C++ अमूर्त कक्षाओं के बीच एक मध्य स्थान रखते हैं। वे कार्यान्वयन (एक्सटेंशन के माध्यम से) शामिल कर सकते हैं लेकिन अवस्था (संग्रहीत गुण) नहीं रख सकते। आइए तीन भाषाओं में अंतर देखें।

विशेषताSwift ProtocolJava InterfaceC++ Abstract Class
विधि कार्यान्वयनहाँ (extension)हाँ (default methods)हाँ
संग्रहीत गुणनहींनहींहाँ
मान प्रकारहाँनहींनहीं
एकाधिक कार्यान्वयनहाँहाँहाँ
इनिशियलाइज़रहाँ (आवश्यकताएँ)नहींहाँ

मुख्य अंतर: Swift Protocol इनिशियलाइज़र और सबस्क्रिप्ट की आवश्यकता हो सकती है, जो Java Interface में उपलब्ध नहीं है। हालांकि, प्रोटोकॉल अवस्था संग्रहीत नहीं कर सकता — यह प्रोटोकॉल को अपनाने वाले प्रकार की जिम्मेदारी बनी रहती है।

प्रोटोकॉल में Associated Types और Generics

Associated Type (संबद्ध प्रकार) एक प्रोटोकॉल के अंदर एक सामान्यीकृत प्रकार है जो अपनाने वाले प्रकार द्वारा ठोस किया जाता है। यह एक ठोस डेटा प्रकार निर्दिष्ट किए बिना टाइप-सुरक्षित प्रोटोकॉल बनाने की अनुमति देता है। संबद्ध प्रकार Swift जेनेरिक के साथ मिलकर काम करते हैं।

Swift
protocol Container {
    associatedtype Item
    var count: Int { get }
    mutating func append(_ item: Item)
    subscript(i: Int) -> Item { get }
}

struct IntStack: Container {
    var items: [Int] = []
    var count: Int { items.count }
    typealias Item = Int
    
    mutating func append(_ item: Int) {
        items.append(item)
    }
    
    subscript(i: Int) -> Int {
        items[i]
    }
}

func sum<C: Container>(_ container: C) -> C.Item where C.Item: Numeric {
    // फ़ंक्शन का शरीर
}

Container associatedtype Item के साथ एक प्रोटोकॉल है। IntStack इसे typealias Item = Int निर्दिष्ट करके लागू करता है। जेनेरिक फ़ंक्शन sum केवल संख्यात्मक कंटेनरों के साथ काम करने के लिए where-खंड का उपयोग करता है। संबद्ध प्रकार प्रोटोकॉल को टाइप सुरक्षा खोए बिना सामान्यीकृत बनाते हैं।

Protocol composition और प्रोटोकॉल एक्सटेंशन

Protocol composition — & ऑपरेटर के माध्यम से कई प्रोटोकॉल का संयोजन। एक रचना के अनुरूप प्रकार को सभी संयुक्त प्रोटोकॉल को लागू करना होता है। यह Swift में अनुपस्थित एकाधिक इनहेरिटेंस को बदलता है और फ़ंक्शन पैरामीटर की आवश्यकताओं को सटीक रूप से निर्दिष्ट करने की अनुमति देता है।

Swift
protocol Named { var name: String { get } }
protocol Aged { var age: Int { get } }

struct Person: Named, Aged {
    let name: String
    let age: Int
}

func greet(_ entity: Named & Aged) {
    print("नमस्ते, \(entity.name), उम्र \(entity.age)!")
}

// Protocol extension — डिफ़ॉल्ट कार्यान्वयन
extension Named {
    func introduce() {
        print("मेरा नाम \(name) है")
    }
}

Protocol extension डिफ़ॉल्ट विधि कार्यान्वयन प्रदान करता है। प्रोटोकॉल को अपनाने वाला प्रकार एक्सटेंशन विधि को ओवरराइड कर सकता है — उस स्थिति में, इसका अपना कार्यान्वयन कहा जाता है। यह वह तंत्र है जिसके द्वारा Swift @objc के बिना वैकल्पिक विधियों को लागू करता है।

Objective-C में @protocol: Swift से अंतर

@protocol Objective-C में Swift Protocol का पूर्ववर्ती है, लेकिन महत्वपूर्ण सीमाओं के साथ। Objective-C प्रोटोकॉल केवल कक्षाओं के लिए उपलब्ध हैं (संरचनाओं या गणनाओं के लिए नहीं) और संदेश पासिंग के माध्यम से गतिशील डिस्पैच का उपयोग करते हैं। विधियाँ @required (डिफ़ॉल्ट) या @optional हो सकती हैं।

Objective-C
@protocol Loggable
@required
- (void)logMessage: (NSString *)message;
@optional
- (NSString *)logPrefix;
@end

@interface ConsoleLogger : NSObject 
@end

@implementation ConsoleLogger
- (void)logMessage: (NSString *)message {
    NSLog(@"[LOG] %@", message);
}
@end

Swift के विपरीत, Objective-C प्रोटोकॉल संबद्ध प्रकारों, जेनेरिक, प्रोटोकॉल एक्सटेंशन या मान प्रकारों का समर्थन नहीं करते। वे वर्ग-आधारित अमूर्तन का एक तंत्र बने हुए हैं, जबकि Swift Protocol सभी प्रकारों के लिए एक पूर्ण-विशेषताओं वाला पॉलिमॉर्फ़िज़्म उपकरण है।

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

प्रोटोकॉल abstract class से कैसे अलग है?

Protocol अवस्था (संग्रहीत गुण) संग्रहीत नहीं कर सकता — केवल गुण आवश्यकताएँ। Abstract class डेटा फ़ील्ड शामिल कर सकता है। Protocol को संरचनाओं और गणनाओं द्वारा अपनाया जा सकता है, जबकि abstract class को केवल कक्षाओं द्वारा उपवर्गित किया जा सकता है। Swift में, प्रोटोकॉल मुख्य अमूर्तन उपकरण हैं; कक्षाओं का उपयोग कम बार किया जाता है।

Protocol-Oriented Programming क्या है?

POP एक प्रतिमान है जहाँ प्रोटोकॉल और प्रोटोकॉल एक्सटेंशन गहरी इनहेरिटेंस पदानुक्रम को बदल देते हैं। एक आधार वर्ग के बजाय जिससे सभी उपवर्ग इनहेरिट करते हैं, POP एक्सटेंशन के माध्यम से डिफ़ॉल्ट कार्यान्वयन के साथ प्रोटोकॉल रचना का उपयोग करता है। यह युग्मन को कम करता है और कोड पुन: उपयोग में सुधार करता है।

क्या एक प्रोटोकॉल दूसरे प्रोटोकॉल को इनहेरिट कर सकता है?

हाँ, Swift प्रोटोकॉल इनहेरिटेंस का समर्थन करते हैं। protocol SerializableDrawable: Drawable, Codable — एक प्रोटोकॉल जो Drawable और Codable की आवश्यकताओं को जोड़ता है। SerializableDrawable को अपनाने वाले प्रकार को पदानुक्रम में सभी प्रोटोकॉल की आवश्यकताओं को पूरा करना होता है। यह वर्ग इनहेरिटेंस से भिन्न है — प्रोटोकॉल का कोई सामान्य पूर्वज नहीं होता।

प्रोटोकॉल के संदर्भ में any और some क्या हैं?

some (अपारदर्शी प्रकार) गारंटी देता है कि फ़ंक्शन प्रोटोकॉल के अनुरूप एक विशिष्ट प्रकार लौटाता है। any (अस्तित्वगत प्रकार) प्रोटोकॉल के अनुरूप किसी भी प्रकार को संग्रहीत करने की अनुमति देता है। some का उपयोग प्रकार की पहचान को संरक्षित करने के लिए किया जाता है, any — विषम संग्रहों के लिए। some Swift 5.1 में दिखाई दिया, any — Swift 5.7 में।

Swift में प्रोटोकॉल अनुरूपता की जाँच कैसे करें?

जाँच के लिए is और कास्टिंग के लिए as? का उपयोग करें: if let drawable = object as? Drawable { drawable.draw(in: ctx) }। Objective-C में conformsToProtocol: का उपयोग किया जाता है। Swift बिना संबद्ध प्रकारों वाले प्रोटोकॉल के लिए is-जाँच का भी समर्थन करता है।

सारांश

  • Protocol — एक अनुबंध जो अपनाने वाले प्रकार के लिए गुणों, विधियों, इनिशियलाइज़र और सबस्क्रिप्ट की आवश्यकताओं को परिभाषित करता है
  • Protocol-Oriented Programming वर्ग इनहेरिटेंस को प्रोटोकॉल रचना और एक्सटेंशन से बदल देता है
  • Protocol extension डिफ़ॉल्ट कार्यान्वयन प्रदान करता है, @objc के बिना विधियों को वैकल्पिक बनाता है
  • Associated types कार्यान्वयन पक्ष पर प्रकार ठोसीकरण के साथ सामान्यीकृत प्रोटोकॉल बनाने की अनुमति देते हैं
  • Protocol composition & के माध्यम से कई प्रोटोकॉल की आवश्यकताओं को जोड़ता है
  • Objective-C @protocol कक्षाओं तक सीमित है और संबद्ध प्रकारों, जेनेरिक या मान प्रकारों का समर्थन नहीं करता
  • अनुशंसा: Swift में प्रोटोकॉल को मुख्य अमूर्तन उपकरण के रूप में उपयोग करें, केवल संदर्भ शब्दार्थ की आवश्यकता होने पर कक्षाओं का सहारा लें

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें