我在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代码吗?
答案 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文件,并替换相应的名称...