2015-06-16 6 views
12

एक्सकोड 7 में एक उद्देश्य-सी संस्करण शामिल है, जहां आप NSArray<UIImage*> जैसे परिभाषित मूल्यों और गुणों के लिए एक प्रकार-संकेत (homogenous) NSArray परिभाषित कर सकते हैं।मैं उद्देश्य-सी जेनेरिक प्रकार कैसे ढूंढ सकता हूं?

मैं अपने JSON-deserializer वर्ग के पुनर्लेखन के लिए इस सुविधा का उपयोग करना चाहते हैं (जो प्रकार संकेत इस तरह की जरूरत है - पहले मैं यह मेरी कक्षाओं गुण के रूप में समरूप सरणियों है कि करने के लिए एक -(Class)jsonHintForKey:(NSString*)key जोड़कर समाधान कर लिया है।)

क्या आप जानते हैं कि (और यदि ऐसा है, तो) मैं रनटाइम पर इस नए प्रकार के संकेत के वर्ग को प्राप्त करने के लिए उद्देश्य-सी रनटाइम का उपयोग कर सकता हूं?

उत्तर

27

एक्सकोड 7 में पेश किए गए हल्के जेनेरिक संकलक को चेतावनी बढ़ाने में मदद करने के लिए समय संकेतों को संकलित करते हैं, लेकिन रन टाइम पर आपको NSArray एस id एस के समान वही व्यवहार मिलता है।

स्रोत: WWDC '15 "Swift and Objective-C Interoperability" session

the transcript of the talk देखें:

तो पूरे हल्के जेनरिक सुविधा एक type erasure model पर आधारित है। जिसका अर्थ यह है कि कंपाइलर में यह समृद्ध स्थिर प्रकार की जानकारी है लेकिन कोड उत्पन्न करते समय यह जानकारी मिटा देती है।

+0

उस स्रोत पर अच्छी नौकरी :) –

7

ऐसा करना संभव नहीं है।

जेनिक्स को उद्देश्य और सी के बीच पुल को बेहतर बनाने के लिए उद्देश्य-सी में पेश किया गया था। उद्देश्य-सी को यह लाभ केवल संकलित समय पर उपयोगी है, और मैं उस जानकारी को रनटाइम पर खो गया हूं।

+1

ध्यान दें कि 'उद्देश्य-सी' कक्षाएं' स्विफ्ट 'में आयात किए जाने पर जेनेरिक पोर्ट नहीं किए जाते हैं, इसलिए मुझे नहीं लगता कि ब्रिजिंग कारण है कि उन्हें' उद्देश्य-सी 'में जोड़ा गया था। – Cristik

संबंधित मुद्दे