在伞头中包含-Swift.h

psh*_*hah 9 objective-c ios swift

我有一个混合的Swift和Objective-C项目.要在Objective-C中访问Swift公共API,API使用者当前必须导入"MyModule-Swift.h".我已经有一个名为"MyModule.h"的Objective-C伞形标题.但是,导入"MyModule.h"不适用于Swift API.我尝试在伞标题中导入"MyModule-Swift.h",但它没有找到它(我假设它是由Xcode动态生成的).

任何建议,以便API使用者可以始终导入"MyModule.h"以使用用Swift/Objective-C编写的公共API将非常感激.

====================================================================

编辑:我为没有花时间正确构建问题而道歉.我有一个名为的框架MyModule.

我有一个Objective-C类叫ABUser,

@interface ABUser: NSObject

- (void)walk;

@end
Run Code Online (Sandbox Code Playgroud)

我想使用Swift为这个类添加新的行为,所以我定义了一个扩展

extension ABUser {

func swiftWalk()

}
Run Code Online (Sandbox Code Playgroud)

现在,假设我想访问Objective-C应用程序swiftWalk定义的方法ABUser,我必须这样做#import <MyModule/MyModule-Swift.h>.#import <MyModule/MyModule.h>如果我想使用该walk方法将会工作.这是假设伞头MyModule.h导入ABUser.h.

我一直想要Objective-C应用程序,#import <MyModule/MyModule.h>并且永远不必担心API是在框架中用Objective-C还是Swift编写的.所以,我尝试导入MyModule-Swift.h伞头MyModule.h.但是,如果这样做,我的Objective-C应用程序无法编译.不确定,如果这是因为MyModule-Swift.hXcode在构建过程中即时生成.

编辑2:添加了一个示例项目来重现此问题:https://github.com/priteshshah1983/MyObjectiveCApp

相关代码在ViewController.m.构建将因master分支而失败.为了使它工作,检查working分支.

psh*_*hah -2

事实证明,使用 using@import MyModule;而不是#import <MyModule/Module.h>允许使用Objective-C 应用程序所期望的walk和方法。swiftWalk

老实说,我不明白细节,但我希望这对其他人有帮助。请大家帮忙解释一下!