[objective-c] उद्देश्य-सी में दृढ़ता से टाइप किए गए संग्रह हैं?



4 Answers

यह उत्तर पुराना है लेकिन ऐतिहासिक मूल्य के लिए बना हुआ है। एक्सकोड 7 के रूप में, जून 8 '15 से कॉनर का जवाब अधिक सटीक है।

नहीं, उद्देश्य-सी में कोई जेनेरिक नहीं है जब तक कि आप अपने स्वयं के कस्टम संग्रह वर्गों में सी ++ टेम्पलेट्स का उपयोग नहीं करना चाहते (जिसे मैं दृढ़ता से हतोत्साहित करता हूं)।

उद्देश्य-सी में एक सुविधा के रूप में गतिशील टाइपिंग है, जिसका अर्थ है कि रनटाइम किसी ऑब्जेक्ट के प्रकार की परवाह नहीं करता है क्योंकि सभी ऑब्जेक्ट संदेश प्राप्त कर सकते हैं। जब आप किसी अंतर्निहित संग्रह में कोई ऑब्जेक्ट जोड़ते हैं, तो उन्हें केवल तभी माना जाता है जैसे वे टाइप id थे। लेकिन चिंता न करें, केवल उन वस्तुओं को संदेश भेजें जैसे सामान्य; यह ठीक काम करेगा (जब तक कि संग्रह में एक या अधिक वस्तुएं आपके द्वारा भेजे जा रहे संदेश का जवाब न दें)

जावा और सी # जैसी भाषाओं में जेनेरिक की आवश्यकता होती है क्योंकि वे मजबूत, स्थिर रूप से टाइप की गई भाषाएं हैं। उद्देश्य-सी की गतिशील टाइपिंग सुविधा की तुलना में पूरी तरह से अलग ballgame।

Question

मैं मैक / आईफोन प्रोग्रामिंग और उद्देश्य-सी के लिए नया हूँ। सी # और जावा में हमारे पास "जेनेरिक" है, संग्रह कक्षाएं जिनके सदस्य केवल घोषित प्रकार के हो सकते हैं। उदाहरण के लिए, सी # में

Dictionary<int, MyCustomObject>

केवल उन कुंजीों को शामिल कर सकते हैं जो पूर्णांक और मान हैं जो MyCustomObject प्रकार के हैं। क्या उद्देश्य-सी में एक समान तंत्र मौजूद है?




पर एक नज़र डालें:

https://github.com/tomersh/Objective-C-Generics

प्रोटोकॉल जांच तंत्र को दोबारा लगाकर, यह एक प्रकार का गरीब व्यक्ति का जेनेरिक प्रतीत होता है।




बस यहाँ कूदना चाहते हैं। मैंने जेनेरिक के बारे में यहां एक ब्लॉग पोस्ट लिखा है।

जिस चीज में मैं योगदान देना चाहता हूं वह यह है कि जेनिक्स को किसी भी वर्ग में जोड़ा जा सकता है , न केवल संग्रह वर्गों जैसे कि ऐप्पल इंगित करता है।

मैंने सफलतापूर्वक विभिन्न वर्गों में जोड़ा है क्योंकि वे ऐप्पल के संग्रह के समान ही काम करते हैं। अर्थात। संकलन समय जांच, कोड पूर्ण करने, कास्ट हटाने, आदि को सक्षम करने आदि।

का आनंद लें।




उद्देश्य-सी में कोई जेनरिक नहीं है।

डॉक्स से

Arrays वस्तुओं के संग्रह आदेश दिया जाता है। कोको कई सरणी कक्षाएं, एनएसएआरएआरई, एनएसएमयूटेबलएरे (एनएसएआरएआरई का उप-वर्ग), और एनएसपीइंटरएरे प्रदान करता है।




यह एक्सकोड 7 में जारी किया गया था (अंत में!)

ध्यान दें कि उद्देश्य सी कोड में, यह सिर्फ संकलन-समय की जांच है; गलत प्रकार को किसी संग्रह में डालने या टाइप की गई संपत्ति को असाइन करने के लिए कोई रन-टाइम त्रुटि नहीं होगी।

घोषित:

@interface FooClass <T> : NSObject
@property (nonatomic) T prop;
@end

उपयोग:

FooClass<NSString *> *foo = [[FooClass alloc] init];
NSArray<FooClass<NSString *> *> *fooAry = [NSArray array];

उन * बारे में सावधान रहें।




Related