Objective C使用Swift代码testing类

我在MyProjectName文件夹中有一个快速的协议IModelIdProvider 。 我在MyProjectNameTests文件夹中创build了一个名为RemoteModelFactoryTest的Objective-Cunit testing类。 要做一些testing, RemoteModelFactoryTest必须实现IModelIdProvider协议。

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

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

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

我知道它的额外hacky和一切,但我做了什么,它的工作是从生成的“Project-Swift.h”复制公共标题,并粘贴到testing.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等的所有macros。我的testing正在构build和传递testingSwift代码。

BTW。 不要忘记在Swift中公开testing的类和方法。

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

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

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

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