我有一个混合的Swift和Objective项目。要访问Objective中的Swift公共API,API使用者目前必须导入"MyModule-Swift.h“。我已经有了一个名为"MyModule.h“的目标C伞头。但是,导入"MyModule.h“并不适用于Swift。我尝试在伞头中导入"MyModule-Swift.h“,但是它没有找到它(我假设它是由Xcode动态生成的)。
任何建议,以便API使用者总是可以导入"MyModule.h“来使用用Swift/Objective编写的公共API,我们将不胜感激。
====================================================================
编辑:我很抱歉没有花时间来正确地构建这个问题。我有一个名为MyModule的框架。
我有一个叫ABUser的目标C类,
@interface ABUser: NSObject
- (void)walk;
@end我想使用Swift向这个类添加新的行为,所以我定义了一个扩展
extension ABUser {
func swiftWalk()
}现在,假设我想从Objective应用程序访问在swiftWalk上定义的ABUser方法,我将不得不使用#import <MyModule/MyModule-Swift.h>。如果我想使用#import <MyModule/MyModule.h>方法,那么walk就可以工作了。这是假设伞头MyModule.h导入ABUser.h。
我一直想把Objective应用程序交给#import <MyModule/MyModule.h>,而不必担心API是用Objective编写的,还是在框架中使用Swift编写的。因此,我尝试在伞头MyModule-Swift.h中导入MyModule.h。但是,我的目标-C应用程序没有编译如果那样做。不确定,这是否因为MyModule-Swift.h是由Xcode在构建过程中动态生成的。
编辑2:添加了一个示例项目在这里重现此问题:https://github.com/priteshshah1983/MyObjectiveCApp
相关代码在ViewController.m中。master分支的构建将失败。要使其正常工作,请查看working分支。
发布于 2015-10-16 04:36:51
使用@import MyModule;的原因是“模块是框架可执行文件及其头的打包”(从这个帖子里)。
换句话说,当您使用@import MyModule;时,Objective会自动导入与模块相关的所有快捷和目标-C标题,而不能从伞头中包含快速标题。我建议您看看@import和#import在链接“所以答案”中的区别。
https://stackoverflow.com/questions/33023544
复制相似问题