2015-06-16 5 views
15

के साथ स्विफ्ट का उपयोग हम आसानी से Objective-C with C++ in Qt का उपयोग कर सकते हैं।क्यूटी

एप्पल WWDC 2015 वार्ता के कई, मैं उम्मीद करते हैं कि स्विफ्ट ओएस एक्स (और iOS) के विकास के लिए ऑब्जेक्टिव-सी का अधिलंघन करेंगी देखा करने के बाद; स्विफ्ट का इस्तेमाल सभी प्रदर्शनों।

ध्यान में रखते हुए कि आप एक ब्रिजिंग हेडर के साथ उद्देश्य-सी और स्विफ्ट का उपयोग कर सकते हैं, क्या एक क्यूटी परियोजना में स्विफ्ट कोड को संकलित करना संभव है और सी ++ के साथ स्विफ्ट प्रथम श्रेणी वस्तुओं (कक्षाएं, स्ट्रक्चर, एनम्स इत्यादि) तक पहुंच सकते हैं?


तो यह संभव है ...

कॉलिंग क्यूटी से एक ऑब्जेक्टिव-सी समारोह एक सी हेडर के साथ एक सी समारोह में कोड लपेटकर चाहिए, Qt से कहा जाता है।

उद्देश्य-सी से कॉलिंग स्विफ्ट की आवश्यकता है कि स्विफ्ट फाइलें उपलब्ध हों, यह इंगित करने के लिए एक ब्रिजिंग हेडर की आवश्यकता है। इसके बाद हेडर को एक्सकोड प्रोजेक्ट में संदर्भित किया जाता है; क्या हम इसे एक क्यूटी .pro में कर सकते हैं और यदि हां, तो कैसे?

मान लीजिए कि हम ब्रिजिंग हेडर निर्दिष्ट कर सकते हैं, हमने अभी भी उद्देश्य-सी फाइलों से स्विफ्ट को कॉल करना संभव बना दिया है, लेकिन स्विफ्ट को सी ++ में सीधे क्यूटी से बुलाया जा सकता है?

+0

यह ब्रिजिंग हेडर के साथ सैद्धांतिक रूप से संभव है। आपने पहले से क्या प्रयास किया है? – JAL

+0

@JAL, लेकिन क्या यह सैद्धांतिक रूप से और व्यावहारिक रूप से संभव है? जहां तक ​​मैं कह सकता हूं, स्विफ्ट केवल उद्देश्य-सी के साथ सीधा संबंध है, सी ++ – TheDarkKnight

+0

नहीं, ठीक है, आपको क्यूटी सी ++ कोड के लिए सी या ऑब्जेक्टिव-सी रैपर बनाना होगा। देखें: http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-c-mm-files – JAL

उत्तर

1

क्यूटी से ऑब्जेक्टिव-सी फ़ंक्शन को कॉल करने के लिए एक सी फ़ंक्शन में कोड को लपेटने की आवश्यकता होती है, जिसमें सी हेडर को क्यूटी से बुलाया जाता है।

यह बिल्कुल सही नहीं है, ओबज-सी और ओब्जे-सी ++ फ़ंक्शंस और विधियों को सीधे ओब्जे-सी ++ से बुलाया जा सकता है। यह देखते हुए कि ओब्जे-सी ++ (ज्यादातर) सी ++ है, क्यूटी और ओब्जे-सी/सी ++ के बीच इंटरफेसिंग छोटा है। आप बस अपनी क्यूटी कार्यान्वयन फाइलों का नाम बदल सकते हैं .mpp के बजाय .mm! आप ओबीजे-सी विधि कार्यान्वयन से सीधे Qt या मानक C++ को कॉल कर सकते हैं, जिसे Obj-C++ फ़ाइलों (.mm, not .m) के रूप में संकलित नहीं किया गया है, और इसके विपरीत।

तेज संकलक आप के लिए एक ब्रिजिंग हैडर उत्पन्न करने के लिए मनाना का एक तरीका होता है, और इस एक कस्टम संकलक या एक कस्टम लक्ष्य के रूप में .pro फ़ाइल में एकीकृत किया जा सकता है।

+0

* "ओब्जे-सी और ओब्जे-सी ++ फ़ंक्शंस और विधियों को सीधे ओब्जे-सी ++ से कहा जा सकता है" * - बेशक, यह ओबीजे-सी के डिजाइन द्वारा है, या आपका मतलब है "सीधे सी ++ से * *? क्या आप स्विफ्ट कंपाइलर को सी ++ में स्विफ्ट के लिए ब्रिजिंग हेडर उत्पन्न करने के लिए विधि की दिशा में इंगित कर सकते हैं? स्विफ्ट और ऑब्जेक्टिव-सी के बीच ब्रिजिंग हेडर से यह अलग होगा? – TheDarkKnight

+1

@TheDarkKnight No, ओब्जे-सी ++ के लिए ब्रिजिंग हेडर बस ओब्जे-सी से एक है, क्योंकि यह ओबीजे-सी ++ भी मान्य है। चूंकि क्यूटी का सी ++ का उपयोग वैध ओबीजे-सी ++ बनाता है, इसलिए आप बस अपनी सभी .cpp फ़ाइलों का नाम बदल सकते हैं। मिमी और सब कुछ अभी भी काम करना चाहिए। –