Objective C使用Swift代码测试类

Mor*_*iak 14 objective-c ios swift xcode6

IModelIdProviderMyProjectName文件夹中有一个swift协议.我创建了一个RemoteModelFactoryTestMyProjectNameTests文件夹中命名的objective-c单元测试类.要做一些测试, RemoteModelFactoryTest必须实现IModelIdProvider协议.

当我#import "MyProjectName-Swift.h"在Objective-c类中使用我的swift协议时,我得到了一个file not found.

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

*Tests使用Swift代码的项目中有什么特别的事吗?

Bar*_*nas 1

我知道它额外的 hacky 和一切,但我所做的和它的工作是从生成的“Project-Swift.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
Run Code Online (Sandbox Code Playgroud)

除此之外,我还复制了SWIFT_CLASS等的所有宏。我的测试正在构建并通过测试 Swift 代码。

顺便提一句。不要忘记将Swift 中经过测试的类和方法公开