ios - 使用 Swift 代码的 Objective C 测试类

标签 ios objective-c swift xcode6

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

当我#import "MyProjectName-Swift.h" 在我的 objective-c 类中使用我的 swift 协议(protocol)时,我得到一个找不到文件

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

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

最佳答案

我知道它额外的 hacky 和一切,但我所做的和它的工作是从生成的“Project-Swift.h”复制公共(public) header 并将需要的内容粘贴到.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 代码。

顺便说一句。不要忘记将 public 放在 Swift 中经过测试的类和方法上。

关于ios - 使用 Swift 代码的 Objective C 测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367982/

相关文章:

swift - 无法从 .xib 文件加载 UIView

ios - 使用 iOS 5 创建 JSON - 问题

java - C++ IO 与 Java IO

ios - 从 xib 加载 View 的正确方法是什么?

c# - 如何更改 HttpWebRequest 中 UserAgent 的编码?

objective-c - 监视目录时dispatch_source_get_data不返回正确的标志

ios - SWTableViewCell 以编程方式滑动

objective-c - 升级到 iOS 6 后 UISegmentedControl 的显示问题

带有 DISPATCH_TIME_FOREVER 的 swift 4.0 dispatch_semaphore_wait

ios - 为什么在更改 View 的 id 时不会第二次调用 onAppear()?