提问人:Morniak 提问时间:6/23/2014 最后编辑:Morniak 更新时间:11/21/2014 访问量:2333
使用 Swift 代码的 Objective C 测试类
Objective C test class using Swift code
问:
我的文件夹中有一个 swift 协议。
我创建了一个在文件夹中命名的 objective-c 单元测试类。
要进行一些测试,必须实现该协议。IModelIdProvider
MyProjectName
RemoteModelFactoryTest
MyProjectNameTests
RemoteModelFactoryTest
IModelIdProvider
当我在 objective-c 类中使用我的 swift 协议时,我得到一个 .#import "MyProjectName-Swift.h"
file not found
如果我将指令更改为 ,则找到标头,但找不到我的协议(它是在项目中定义的,而不是在项目中定义的)。#import
#import "MyProjectNameTests-Swift.h"
MyProjectName
MyProjectNameTests
在使用 Swift 代码的项目中有什么特别的事情要做吗?*Tests
答:
要在与 Swift 代码相同的框架目标中导入一组 Objective-C 文件,您需要将这些文件导入到框架的 Objective-C 总标题中。
将 Swift 代码从同一框架导入 Objective-C
在“生成设置”下的“打包”中,确保该框架目标的“定义模块”设置设置为“是”。 使用此语法将该框架目标中的 Swift 代码导入到该框架目标中的任何 Objective-C .m 文件中,并替换适当的名称...
评论
Project-Target
ProjectTest-Target
我知道它的额外黑客和一切,但我所做的和它的工作是从生成的“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
最重要的是,我还复制了SWIFT_CLASS等的所有宏。我的测试正在构建并通过测试 Swift 代码。
顺便说一句。别忘了公开 Swift 中经过测试的类和方法。
评论