2016-08-16 18 views
22

"गैर खुला वर्ग से विरासत नहीं कर सकते" Xcode 8 बीटा के रूप में 6 अब मैं संकलन त्रुटि मिलती है अपने को परिभाषित मॉड्यूल "तेज

वर्ग मैं के बाहर" गैर खुला वर्ग (कक्षा) से विरासत नहीं कर सकते " से इनहेरिट किया गया था एक अलग स्विफ्ट ढांचे का हिस्सा था, लेकिन मेरी परियोजना अपने आप Xcode 8 बीटा 5. क्या मैं फिर से संकलित करने के लिए अपने प्रोजेक्ट प्राप्त करने के लिए बदलने की जरूरत है ऐसा करने के लिए संकलित?

+2

संबंधित: http://stackoverflow.com/questions/38947101/what-is-an-open-var-in-swift –

उत्तर

41

मिले जवाब।

स्विफ्ट 3 में अब आप public के बजाय open के रूप में कक्षा को चिह्नित कर सकते हैं, यह मॉड्यूल के बाहर फ़ाइलों को उस वर्ग को उप-वर्ग करने की अनुमति देता है।

open के साथ बस अपने मॉड्यूल क्लास में public को प्रतिस्थापित करें।

संदर्भ here

+0

दिलचस्प। मुझे इसके बारे में भी पता नहीं था। – Alexander

+2

भी एक्सकोड 8 बीटा 6 रिलीज नोट्स में प्रलेखित। –

+0

बहुत अच्छी तरह से काम करता है! महान! –

16

जिस वर्ग से आप उत्तराधिकारी हैं उसे public के बजाय open के रूप में परिभाषित करने की आवश्यकता है। परिवर्तन पर

थोड़ा अधिक संदर्भ स्विफ्ट 3 में नियंत्रण का उपयोग करने की:

  • private: संस्थाओं केवल स्रोत फ़ाइल कि वे कहाँ हैं भीतर से उपलब्ध हैं

    स्विफ्ट 2 केवल 3 पहुँच स्तर था परिभाषित।

  • internal: संपूर्ण मॉड्यूल में संस्थाएं उपलब्ध हैं जिनमें परिभाषा शामिल है।
  • public: इकाइयां एपीआई के रूप में उपयोग के लिए लक्षित हैं, और मॉड्यूल को आयात करने वाली किसी भी फ़ाइल द्वारा एक्सेस किया जा सकता है।

स्विफ्ट 3 2 अधिक पहुंच स्तर (open और fileprivate) जोड़ने और private के अर्थ बदल रहा है:

  • private: वर्तमान घोषणा केवल भीतर प्रतीक दिखाई।
  • fileprivate: वर्तमान फ़ाइल के भीतर दिखाई देने वाला प्रतीक।
  • internal: वर्तमान मॉड्यूल के भीतर दिखाई देने वाला प्रतीक।
  • public: वर्तमान मॉड्यूल के बाहर दिखाई देने वाला प्रतीक।
  • open: कक्षा या फ़ंक्शन के लिए मौजूदा मॉड्यूल के बाहर उप-वर्गीकृत या ओवरराइड किया जाना चाहिए।