Objective C使用Swift代码测试类

时间:2014-06-23 14:03:12

标签: ios objective-c swift xcode6

我在IModelIdProvider文件夹中有一个swift协议MyProjectName。 我在RemoteModelFactoryTest文件夹中创建了一个名为MyProjectNameTests的objective-c单元测试类。 要进行一些测试,RemoteModelFactoryTest必须实施IModelIdProvider协议。

当我#import "MyProjectName-Swift.h"在我的objective-c课程中使用我的swift协议时,我得到file not found

如果我将#import指令更改为#import "MyProjectNameTests-Swift.h",则会找到标题,但不会找到我的协议(它在MyProjectName项目中定义,而不在MyProjectNameTests项目中定义)

*Tests项目中有什么特别的东西可以使用Swift代码吗?

2 个答案:

答案 0 :(得分:1)

我知道它的额外hacky和一切,但我所做的和它的工作是从生成的&#34; Project-Swift.h&#34; 复制公共标题并粘贴所需的内容< strong> .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 等所有宏。我的测试正在构建并通过测试Swift代码。

顺便说一句。别忘了在Swift中对测试的类和方法进行公开

答案 1 :(得分:-1)

要在与Swift代码相同的框架目标中导入一组Objective-C文件,您需要将这些文件导入到框架的Objective-C总体标题中。

从同一框架将Swift代码导入Objective-C

在“构建设置”下的“打包”中,确保将该框架目标的“定义模块”设置设置为“是”。 使用此语法将该框架目标中的Swift代码导入该框架目标中的任何Objective-C .m文件,并替换相应的名称...

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