2014-10-06 29 views
8

निम्नलिखित खेल का मैदान पर विचार करें। जेनेरिक फ़ंक्शन "मेकर" सही प्रारंभकर्ता को कॉल करने के लिए मुझे बी-क्लास (बी कक्षा परिभाषा में टिप्पणी को हटाकर परीक्षण) में स्ट्रिंगइनेबल को स्पष्ट रूप से कार्यान्वित करना होगा?स्विफ्ट प्रोटोकॉल विरासत और जेनेरिक कार्यों

+0

के प्रारंभकर्ता कहा जाता है, जब मैंने इनिट फ़ंक्शन के सामने "आवश्यक" विनिर्देशक जोड़ा, तो यह मेरे लिए काम करता था। – user965972

उत्तर

2

यह एक सरल कारण के लिए एक संकलक बग की तरह बदबू आ रही है: makerBB प्रकार का एक चर रहा है, लेकिन यह A का एक उदाहरण दिया गया है। यह संभव नहीं होना चाहिए, और वास्तव में यदि आप प्रिंट करने का प्रयास करते हैं, और another_storedmakerB चर की संपत्ति another_stored संपत्ति तक पहुंचने के लिए, आमतौर पर एक रनटाइम अपवाद उठाया जाता है, और मैं और कुछ भी उम्मीद नहीं करता।

क्योंकि अगर BA का एक उपवर्ग है, A का एक उदाहरण B प्रकार का एक चर करने के लिए (जबकि विपरीत संभव है) नहीं सौंपा जा सकता है यही कारण है कि।

B प्रकार का एक चर के लिए A प्रकार का एक चर नियत हालांकि संभव है, लेकिन केवल इन परिस्थितियों में:

  • B को A से एक स्पष्ट खिन्न किया जाता है (संकलक अन्यथा त्रुटि चाहिए)
  • उदाहरण A चर द्वारा संदर्भित वास्तव में B का एक उदाहरण है (एक क्रम अपवाद अन्यथा उठाया जाना चाहिए)

ध्यान दें कि कंपाइलर सही प्रारंभकर्ता को कॉल करने में असफल रहा है - इसे किसी अन्य वर्ग

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