खोज…


बेसिक प्रोटोकॉल परिभाषा;

एक नया प्रोटोकॉल परिभाषित करना:

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

वैकल्पिक और आवश्यक तरीके

डिफ़ॉल्ट रूप से, किसी प्रोटोकॉल में घोषित सभी विधियों की आवश्यकता होती है। इसका मतलब यह है कि इस प्रोटोकॉल के अनुरूप कोई भी वर्ग उन तरीकों को लागू करना चाहिए।

वैकल्पिक तरीकों की घोषणा करना भी संभव है। जरूरत पड़ने पर ही ये तरीका लागू किया जा सकता है।

आप @optional निर्देश के साथ वैकल्पिक तरीकों को चिह्नित करते हैं।

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
@end

इस मामले में, केवल एक और anotherMethod को वैकल्पिक के रूप में चिह्नित किया गया है; आवश्यकता के बिना @optional निर्देश के तरीकों की आवश्यकता होती है।

@optional निर्देश उन विधियों पर लागू होता है जो प्रोटोकॉल परिभाषा के अंत तक या किसी अन्य निर्देश के मिलने तक लागू होते हैं।

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
- (void)andAnotherMethod:(id)argument;
@required
- (void)lastProtocolMethod;
@end

यह अंतिम उदाहरण दो वैकल्पिक विधियों और दो आवश्यक विधियों के साथ एक प्रोटोकॉल को परिभाषित करता है।

प्रोटोकॉल के अनुरूप

निम्न सिंटैक्स इंगित करता है कि कोण कोष्ठक का उपयोग करके एक वर्ग एक प्रोटोकॉल को अपनाता है।

@interface NewClass : NSObject <NewProtocol>
...
@end

इसका मतलब यह है कि न्यूक्लास का कोई भी उदाहरण इसके इंटरफ़ेस में घोषित तरीकों का जवाब देगा, लेकिन यह NewProtocol सभी आवश्यक तरीकों के लिए एक कार्यान्वयन प्रदान करेगा।

एक वर्ग के लिए कई प्रोटोकॉल के अनुरूप होना भी संभव है, उन्हें अल्पविराम से अलग करके।

@interface NewClass : NSObject <NewProtocol, AnotherProtocol, MyProtocol>
...
@end

जैसे एकल प्रोटोकॉल के अनुरूप, कक्षा को प्रत्येक प्रोटोकॉल के प्रत्येक आवश्यक विधि को लागू करना चाहिए, और प्रत्येक वैकल्पिक विधि जिसे आप लागू करना चाहते हैं।

आगे की घोषणा

तरीकों के बिना प्रोटोकॉल नाम घोषित करना संभव है:

@protocol Person;

अपने कोड का उपयोग करें (वर्ग परिभाषा, आदि):

@interface World : NSObject
@property (strong, nonatomic) NSArray<id<some>> *employees;
@end

और बाद में अपने कोड में कहीं प्रोटोकॉल की विधि को परिभाषित करें:

@protocol Person
- (NSString *)gender;
- (NSString *)name;
@end

यह तब उपयोगी होता है जब आपको प्रोटोकॉल विवरण के साथ उस फ़ाइल को आयात करने तक प्रोटोकॉल विवरण जानने की आवश्यकता नहीं होती है। तो, आपकी क्लास हेडर फ़ाइल स्पष्ट रहती है और इसमें केवल क्लास का विवरण होता है।

वैकल्पिक विधि के कार्यान्वयन की जाँच

if ([object respondsToSelector:@selector(someOptionalMethodInProtocol:)])
{
    [object someOptionalMethodInProtocol:argument];
}

जाँच अनुरूप प्रोटोकॉल

एक बूलियन संकेत देता है कि यदि वर्ग प्रोटोकॉल के अनुरूप है:

[MyClass conformsToProtocol:@protocol(MyProtocol) ];



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow