Objective-C Language
प्रोटोकॉल
खोज…
बेसिक प्रोटोकॉल परिभाषा;
एक नया प्रोटोकॉल परिभाषित करना:
@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)
];