2014-06-23 9 views
13

का उपयोग कर उद्देश्य सी टेस्ट क्लास MyProjectName फ़ोल्डर में मेरे पास एक स्विफ्ट प्रोटोकॉल IModelIdProvider है। मैंने फ़ोल्डर में RemoteModelFactoryTest नामक एक उद्देश्य-सी इकाई परीक्षण कक्षा बनाई है। कुछ परीक्षण करने के लिए, RemoteModelFactoryTest को IModelIdProvider प्रोटोकॉल लागू करना होगा।स्विफ्ट कोड

जब मैं अपने उद्देश्य-सी कक्षा में अपने स्विफ्ट प्रोटोकॉल का उपयोग करने के लिए #import "MyProjectName-Swift.h", मुझे file not found मिलता है।

अगर मैं #import "MyProjectNameTests-Swift.h" करने के लिए #import अनुदेश बदलने के लिए, शीर्ष लेख पाया जाता है लेकिन मेरे प्रोटोकॉल (यह MyProjectNameTests परियोजना में नहीं, MyProjectName परियोजना में परिभाषित किया गया है)।

क्या स्विफ्ट कोड का उपयोग करने के लिए *Tests परियोजनाओं में कुछ विशेष बात है?

+2

स्विफ्ट फ़ाइल परीक्षण बंडल की ओर लक्षित है? –

+0

वर्तमान त्वरित दस्तावेज या तो गलत है या एक्सकोड में एक बग है। फ़ाइल को खोजने के लिए, आपको बिल्ड सेटिंग्स में "उत्पाद मॉड्यूल नाम" को परिभाषित करना होगा - इसे "MyProjectName" पर सेट करें और आपके आयात को काम करना चाहिए। –

+0

@AhihiBeckert मैंने आपके द्वारा सुझाए गए उत्पाद मॉड्यूल नाम को बदलने का प्रयास किया है (देखें [यहां] (http://stackoverflow.com/questions/28114772/cant-use-swift-classes-inside-objective-c-unit-test)) लेकिन यह अब तक मदद नहीं करता था। क्या आप वास्तव में नुस्खा का प्रयास किया था? – Drux

उत्तर

1

मैं इसके अतिरिक्त hacky और सब कुछ पता है, लेकिन मैंने जो किया और यह काम किया उत्पन्न "हेडर-स्विफ्ट.h" से सार्वजनिक शीर्षलेखों की प्रतिलिपि बनाएँ और .m परीक्षण की फ़ाइल को पेस्ट करें।

तो मैं कुछ इस तरह की नकल की:

SWIFT_CLASS("_TtC10Inventorum11ImageEntity") 
@interface ImageEntity : NSObject <FICEntity> 
@property (nonatomic, copy) NSString * imageID; 
@property (nonatomic) NSURL * retinaImageURL; 
@property (nonatomic) NSURL * nonRetinaimageURL; 
@property (nonatomic, readonly) NSURL * imageURL; 
@property (nonatomic, readonly, copy) NSString * UUID; 
@property (nonatomic, readonly, copy) NSString * sourceImageUUID; 
@property (nonatomic) RACSignal * rac_signalForImage; 
- (instancetype)init OBJC_DESIGNATED_INITIALIZER; 
- (NSURL *)sourceImageURLWithFormatName:(NSString *)formatName; 
- (FICEntityImageDrawingBlock)drawingBlockForImage:(UIImage *)image withFormatName:(NSString *)formatName; 
- (void)objc_setType:(NSString *)type; 
@end 

और यह मैं भी SWIFT_CLASS आदि मेरे परीक्षण के निर्माण और स्विफ्ट कोड का परीक्षण से गुजर रहे हैं के लिए सभी मैक्रो की नकल की है की चोटी पर।

बीटीडब्ल्यू। स्विफ्ट में परीक्षण कक्षाओं और विधियों पर सार्वजनिक डालना न भूलें।

-1

अपने स्विफ्ट कोड के समान फ्रेमवर्क लक्ष्य में उद्देश्य-सी फ़ाइलों का एक सेट आयात करने के लिए, आपको ढांचे के लिए ऑब्जेक्टिव-सी छतरी शीर्षलेख में उन फ़ाइलों को आयात करने की आवश्यकता होगी।

एक ही ढांचे

से ऑब्जेक्टिव-सी में स्विफ्ट कोड आयात करने के लिए सेटिंग्स बिल्ड के तहत, पैकेजिंग में, सुनिश्चित करें कि परिभाषित करता है मॉड्यूल है कि ढांचे के लक्ष्य के लिए सेटिंग हाँ करने के लिए सेट है। आयात उस ढांचे इस सिंटैक्स का उपयोग, और उपयुक्त नाम प्रतिस्थापन लक्ष्य के भीतर किसी भी ऑब्जेक्टिव-सी मीटर फ़ाइल में उस ढांचे लक्ष्य से स्विफ्ट कोड ...

https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75

+2

मुझे नहीं लगता कि यह उस समस्या को हल करेगा जो @Morniak है। उन्होंने कहा कि वह 'प्रोजेक्ट-टार्गेट' से 'प्रोजेक्टटेस्ट-टार्गेट' में ओब्जे-सी यूनिट परीक्षण में स्विफ्ट फ़ाइल का उपयोग करना चाहते हैं। –

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