【问题标题】:Include -Swift.h in the umbrella header在伞头文件中包含 -Swift.h
【发布时间】:2016-01-06 12:48:02
【问题描述】:

我有一个混合的 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 的框架。

我有一个名为 ABUser 的 Objective-C 类,

@interface ABUser: NSObject

- (void)walk;

@end

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

extension ABUser {

func swiftWalk()

}

现在,假设我想从 Objective-C 应用程序访问在 ABUser 上定义的 swiftWalk 方法,我将不得不使用 #import <MyModule/MyModule-Swift.h>。如果我想使用 walk 方法,#import <MyModule/MyModule.h> 会起作用。这是假设伞形标题MyModule.h 导入ABUser.h

我一直希望将 Objective-C 应用程序添加到 #import <MyModule/MyModule.h>,并且永远不必担心 API 是用 Objective-C 还是框架中的 Swift 编写的。所以,我尝试在伞形标题MyModule.h 中导入MyModule-Swift.h。但是,如果这样做,我的 Objective-C 应用程序没有编译。不确定,这是否是因为 MyModule-Swift.h 是 Xcode 在构建过程中动态生成的。

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

相关代码在ViewController.m。构建将因master 分支而失败。要让它工作,请查看working 分支。

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    使用@import MyModule; 起作用的原因是“模块是框架可执行文件及其标头的打包”(from this SO post)。

    换句话说,当你@import MyModule; 时,Objective-C 会自动导入所有与模块相关的 swift 和 Objective-C 头文件,而你不能从伞形头文件中包含 swift 头文件。我建议您在链接的 SO 答案中查看 @import#import 之间的区别。

    【讨论】:

      【解决方案2】:

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

      老实说,我不明白细节,但我希望这对其他人有所帮助。请随时解释!

      【讨论】:

      • “请随意解释” 我的动机是什么?你已经给自己正确的答案,所以赏金是无法赢得的。你也白丢了50分……而且这个问题仍然很烂。 “但是,这不起作用”甚至意思是什么意思?
      • 好的,我撤回了我的答案作为正确答案。对不起,我想我不能比这更好地解释它了。我注意到你已经对此投了反对票!
      • 什么不能只显示某人理解和重现问题所需的所有实际代码?
      • 添加了一个示例项目以在此处重现此问题:github.com/priteshshah1983/MyObjectiveCApp
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多