2014-06-11 12 views
10

मैं एक मुद्दा है जहाँ मेरे स्विफ्ट कोड ठीक है, लेकिन फिर उत्पन्न -Swift.h फ़ाइल उस में कोई त्रुटि है संकलित में चल रहा हूँ ...स्विफ्ट संकलन बग "अज्ञात प्रकार नाम" और "उम्मीद की एक प्रकार"

class MyScene : CCLayer { 
    var ctrl : CCControlSlider? 
} 

यह तेजी से कोड में ठीक संकलित करता है तथा मैं ctrl वस्तु पर तरीकों को देखने के ठीक रूप में अच्छी तरह कर सकते हैं:

यहाँ मैं क्या कर रहा का एक उदाहरण है। मैं अपने पुल शीर्षक में निम्नलिखित है:

#import "cocos2d.h" 
#import "CCControlSlider.h" 

यह अन्य वर्गों है कि अन्य पुस्तकालयों जो सही ढंग से काम का उपयोग में बिल्कुल ठीक काम करता है। यह भी ध्यान रखें कि मैं अपने उद्देश्य-सी कक्षाओं में इस सीसीसींट्रोलस्लाइडर क्लास का उपयोग किसी भी मुद्दे के साथ नहीं कर सकता।

यहाँ उत्पन्न -Swift.h फाइल पर क्या होता है:

SWIFT_CLASS("_TtC15MyProject10MyScene") 
@interface MyScene : CCLayer 
@property (nonatomic) CCControlSlider * ctrl; 
@end 

संपत्ति त्रुटि "अज्ञात प्रकार का नाम" CCControlSlider है "और अगर यह एक विधि में प्रयोग किया जाता है तो यह त्रुटि देता है" उम्मीद एक प्रकार "।

यह अन्य वर्गों का उपयोग कर बस ठीक काम करता है, लेकिन किसी कारण से यह एक वर्ग ही उत्पन्न हेडर फाइल में इस संकलक त्रुटि देता है और केवल जब स्विफ्ट से इस्तेमाल किया।

मुझे लगता है कि मैं क्या सोच रहा हूँ क्या मैं कुछ गलत कर रहा हूं या नहीं यह सिर्फ एक बग है ??

उत्तर

4

जवाब यहाँ दी सरल तरीका है: https://stackoverflow.com/a/24216718/341994

basicall y, कहीं आपके उद्देश्य-सी कोड में आप स्वचालित रूप से जेनरेट किए गए -Swift.h शीर्षलेख आयात कर रहे हैं। उसी कोड में, से पहले #import लाइन, #import "CCControlSlider.h" डालें। इन दो #import बयान का आदेश महत्वपूर्ण है!

तथ्य यह है कि इस उद्देश्य-सी वर्ग को CCControlSlider की आवश्यकता नहीं हो सकती है (हालांकि यह करता है, यह एक बोनस है)। महत्वपूर्ण बात यह है कि आदेश है।हम नामस्थान को स्वचालित रूप से जेनरेट किए गए -Swift.h शीर्षलेख पर प्रकट करने से पहले नामस्थान को CCControlSlider पर बेनकाब करना चाहते हैं।

+0

सही, यह चाल है। धन्यवाद –

+0

क्या यह एक बग बनाता है? मुझे उम्मीद है कि स्वत: जेनरेटेड-स्विस फ़ाइल में एक होगा ब्रिजिंग हेडर में सब कुछ के लिए ccess? – sammyd

+0

ProjectName-Swift.h फ़ाइल स्वचालित रूप से एक्सकोड द्वारा जेनरेट की जाती है, आपको इसे .m फ़ाइल में आयात करने की आवश्यकता होती है: #import बेशक, -Swift.h फ़ाइल और -ब्रिजिंग-हेडर.h, दोनों यदि आप उद्देश्य-सी में स्विफ्ट जोड़ते हैं तो इसकी आवश्यकता होती है। –

7

आप आयात का आदेश के बारे में चिंता करने की जहां भी आप ProjectName-Swift.h फ़ाइल आयात नहीं करना चाहते हैं, इस प्रयास करें:

निम्नलिखित सामग्री के साथ ProjectName-Swift-Fixed.h नामित

// ProjectName-Swift-Fixed.h 
@class CCControlSlider; 
// (Add other imports or forward declarations here) 
#import "ProjectName-Swift.h" 

दूसरा एक फ़ाइल बनाएँ, भर आपके शेष कोडबेस, #import "ProjectName-Swift.h"#import "ProjectName-Swift-Fixed.h"

इस दृष्टिकोण केकी एक सूची को कॉपी और पेस्ट करने पर दो लाभ हैं प्रत्येक स्थान ऊपरबयानों आप ऑब्जेक्टिव-सी कोड में स्विफ्ट वर्गों का उपयोग करें:

  1. आप आयात का आदेश बारे में चिंता करने ProjectName-Swift-Fixed.h फ़ाइल में छोड़कर नहीं होगा
  2. जब आप नई ऑब्जेक्टिव-सी कक्षाओं जोड़ने अपने स्विफ्ट कोड के लिए, आप हर ऑब्जेक्टिव-सी फ़ाइल स्विफ्ट कोड का उपयोग करता है में नए #import बयान को जोड़ने के लिए की ज़रूरत नहीं होगी
9

ऑब्जेक्टिव सी फाइलों के एक सेट को मेरे ज्यादातर स्विफ्ट-आधारित प्रोजेक्ट में शामिल करते हुए अचानक मुझे इन त्रुटियों में से बहुत कुछ मिलना शुरू हो गया। तब मुझे एहसास हुआ कि हालांकि फ़ाइल था:

#import <Foundation/Foundation.h> 

यह नहीं था:

#import <UIKit/UIKit.h> 

और एक बार मुझे लगता है कि लाइन जोड़ा त्रुटियों को हल करने शुरू कर दिया। बाद में सफाई हमेशा मदद करता है। गुड लक

नोट: स्विफ्ट आयात के नए संस्करणों के साथ बहुत टाइप करने के लिए आसान कर रहे हैं और तरह ऐसा किया जाता है:

import UIKit 
+1

अच्छा, कभी यह नहीं लगाया होगा कि मुझे अपने आप से बाहर निकलना होगा कि मुझे उस वर्ग की तुलना में "उच्च" आयात की भी आवश्यकता है, जिसे मैं आयात करना चाहता हूं। धन्यवाद आदमी, मुझे एक घंटे बचाया – user2875404

1

ओसी कोड एक वैश्विक कॉल # आयात है "ProjectName - तेज एच।", और " प्रोजेक्टनाम - ब्रिजिंग - हेडर एच। "और ओसी कोड को कॉल करता है। यह मूल वर्ग कॉल उप-वर्गों, उप-वर्गों के बराबर है और सुपरक्लास को कॉल करता है।" प्रोजेक्टनाम - ब्रिजिंग - हेडर एच "को कॉल करने के लिए ओसी क्लास कॉल नहीं करता है # आयात "प्रोजेक्टनाम - स्विफ्ट। एच

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