2015-10-21 10 views
8

मैं तेजी में दो चौखटे का निर्माण किया है, उन्हें CoreFramework और MyFrameworkस्विफ्ट फ्रेमवर्क में निर्भरता के वर्ग का पर्दाफाश

MyFrameworkCoreFramework करने के लिए एक निर्भरता है और इसकी जनता के तरीकों में CoreFramework की कक्षाएं, structs और enums में से कुछ का उपयोग करता है कॉल उदाहरण के लिए इस तरह:

public func fetchData() -> CoreStruct 

मैं दोनों फ़्रेमवर्क के लिए एक podspec की स्थापना की है और मैं अपने प्रोजेक्ट में एक फली के रूप में MyFramework उपयोग कर सकते हैं। अपने प्रोजेक्ट में मैं की तरह कुछ लिखते थे:

:

let result = fetchData() 

यह संकलित करता है तथा Xcode यहां तक ​​कि जब मैं Alt + चर क्लिक मुझे सही प्रकार देता है, लेकिन मैं स्पष्ट रूप से result इस तरह के प्रकार को निर्दिष्ट करना चाहते हैं

let result: CoreStruct = fetchData() 

मैं एक संकलक त्रुटि मिलती है और मैं CoreFramework

आयात करने के लिए क्या मैं स्पष्ट रूप से अंतर्निहित ढांचे आयात करने के लिए बिना, अपने प्रोजेक्ट में CoreStruct जैसी चीजों का उपयोग करने में सक्षम हो, मुझे क्या करना होगा है?

+0

मुझे नहीं पता कि कोकोपॉड कैसे काम करता है, लेकिन इसके बिना, आप आम तौर पर कोर डारा, नींव और इसी तरह के ढांचे के लिए 'आयात' निर्देश का उपयोग करते हैं। क्या आप कोकोपोड्स के साथ छोड़ सकते हैं? –

+0

लेकिन अगर मैं आयात करता हूं तो भी कहता हूं कि 'कोरडाटा' मैं परियोजना में अतिरिक्त आयात किए बिना 'एनएसएमएनेज ऑब्जेक्ट 'जैसी चीजों का उपयोग करने में सक्षम हूं? मुझे लगता है कि – eyeballz

+0

प्रोजेक्ट स्कोप में नहीं है, तो आप सही हैं। सिवाय इसके कि आप इसे मुख्य फ़ाइल में करते हैं। –

उत्तर

2

एक मॉड्यूल को स्वचालित रूप से आयात करने के लिए स्विफ्ट में कोई रास्ता नहीं है। यह भाषा डिजाइनरों के हिस्से पर एक सचेत विकल्प था, और स्विफ्ट इसके बारे में सख्त है।

वहाँ कुछ एक "छाता रूपरेखा" जो की तरह क्या आप आप कई subframeworks के लिए एक मुखौटा बनाने की अनुमति से चाहते है, लेकिन एप्पल specifically discourages you from creating one कहा जाता है।

वर्जित, आप सुनिश्चित करना चाहिए कि (अपने उदाहरण में) fetchData() और CoreStruct एक ही ढांचे, जो तुम कर सकते हो में संकलित द्वारा किया जाता है:

  • होने MyFramework एक Git submodule के रूप में CoreFramework के कोड में शामिल हैं,
  • में use_frameworks विकल्प के बिना MyFrameworkमें होने MyFramework उपयोग Cocoapods समान कार्यस्थल के भीतर CoreFramework निर्माण करने के लिए (यानी एक फली के रूप में CoreFramework प्रकाशित करें, और शामिल यह पॉडफाइल, ताकि आपको एक ढांचे में संकलित एक वर्कस्पेस में दो परियोजनाएं मिलें),
  • परियोजनाओं में विलय (यानी। बस MyFramework और एक ही परियोजना) के लिए CoreFramework से सभी स्रोत फ़ाइलें जोड़ने के लिए,

... या कुछ और है कि दो स्रोत के पेड़ का कारण बनता है एक ढांचे में संकलित की।

+1

उत्तर के लिए धन्यवाद। क्या आप पर विस्तार कर सकते हैं "MyFramework को कोरफ्रेमवर्क को उसी वर्कस्पेस में बनाने के लिए कोकोपोड का उपयोग करना" भाग है? – eyeballz

+1

संपादन देखें। यह मूल रूप से कोडबेस को विलय करने का एक शानदार तरीका है, केवल तभी उपयोगी है जब आपके पास MyFramework के स्वतंत्र रूप से CoreFramework को प्रकाशित/उपयोग करने का कारण हो। –

+0

ठीक है, हालांकि मैं अपने विशेष मामले में इसका उपयोग नहीं कर सकता यह अभी भी एक अच्छा और वैध जवाब है। उम्मीद है कि यह कुछ लोगों की मदद करता है – eyeballz

-1

आप केवल इस विशेष प्रकार के आयात करते हैं, The Swift Programming Language Reference: Import Declarations देखने के लिए

import struct CoreFramework.CoreStruct 

कर सकता है।

+0

लेकिन इसका मतलब है कि मुझे अभी भी इसे आयात करना है। मैं पहले स्थान पर 'कोरफ्रेमवर्क' को किसी भी आयात से बचना चाहता था – eyeballz

+0

जैसा कि आप इसे "स्वीकृत उत्तर" देखते हैं, ऐसा करने का कोई तरीका नहीं है, अगली सबसे अच्छी बात यह है कि पूरे ढांचे को आयात करने से बचें, संभवतः आपके नामस्थान को प्रदूषित करना। – eik

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