सामान्य NSArrays को उपवर्ग द्वारा महसूस किया जा सकता है NSArray
, और अधिक प्रतिबंधक वाले सभी प्रदान किए गए तरीकों को फिर से परिभाषित किया जा सकता है। उदाहरण के लिए,
- (id)objectAtIndex:(NSUInteger)index
में पुनर्परिभाषित करना होगा
@interface NSStringArray : NSArray
जैसा
- (NSString *)objectAtIndex:(NSUInteger)index
एक NSArray के लिए केवल NSStrings शामिल करने के लिए।
निर्मित उपवर्ग का उपयोग ड्रॉप-इन प्रतिस्थापन के रूप में किया जा सकता है और कई उपयोगी विशेषताएं ला सकता है: कंपाइलर चेतावनी, संपत्ति का उपयोग, बेहतर कोड निर्माण और Xcode में -प्राप्ति। ये सभी संकलन-समय की विशेषताएं हैं, वास्तविक कार्यान्वयन को फिर से परिभाषित करने की आवश्यकता नहीं है - NSArray के तरीकों का अभी भी उपयोग किया जा सकता है।
इसे स्वचालित करना और इसे केवल दो बयानों तक उबालना संभव है, जो इसे उन भाषाओं के करीब लाता है जो जेनरिक का समर्थन करते हैं। मैंने WMGenericCollection के साथ एक ऑटोमेशन बनाया है , जहां टेम्प्लेट C प्रीप्रोसेसर मैक्रोज़ के रूप में दिए गए हैं।
मैक्रो युक्त हेडर फ़ाइल आयात करने के बाद, आप दो विवरणों के साथ एक सामान्य NSArray बना सकते हैं: एक इंटरफ़ेस के लिए और एक कार्यान्वयन के लिए। आपको केवल वह डेटा प्रकार प्रदान करना होगा जिसे आप अपने उपवर्गों के लिए संग्रहीत और नाम देना चाहते हैं। WMGenericCollection ऐसे टेम्प्लेट प्रदान करता है NSArray
, NSDictionary
और NSSet
, साथ ही उनके परस्पर समकक्ष भी।
एक उदाहरण: List<int>
एक कस्टम वर्ग द्वारा महसूस किया जा सकता है NumberArray
, जिसे निम्नलिखित कथन के साथ बनाया गया है:
WMGENERICARRAY_INTERFACE(NSNumber *, // type of the value class
// generated class names
NumberArray, MutableNumberArray)
एक बार बना लेने के बाद NumberArray
, आप इसे अपने प्रोजेक्ट में हर जगह उपयोग कर सकते हैं। इसमें सिंटैक्स की कमी है <int>
, लेकिन आप इन्हें टेम्प्लेट के रूप में कक्षाओं के रूप में लेबल करने के लिए अपनी स्वयं की नामकरण योजना चुन सकते हैं।