Swift class 没有出现在生成的 <Project_Name>Swift.h 头文件中

Swift class not appearing in generated <Project_Name>Swift.h header file

我在将 class(用 Swift 编写并从 pod 中编写)导入我的 Objective-C 代码时遇到问题。我认为问题是由于 class 未能出现在我自动生成的 -Swift.h 头文件中,但我不知道如何解决这个问题。

我的 Podfile 有 use_frameworks! 声明,我安装了 pod,我可以在我的任何 Swift 代码中使用 pod 的 class 但不能在 Obj- C.

我要导入的 Swift class 是 UITableViewCell 的扩展,声明为 public class。它没有在其源代码中使用 @objc 注释声明 class,但我自己添加它似乎也没有什么不同。

在我的 Obj-C 源代码中,我有 #import "ProjectName-Swift.h",(带有我的实际项目名称)但我的 Obj-C 文件在清理后仍然无法识别 class建造。我已经检查过 Swift 头文件是否存在(确实存在),但经检查它似乎没有提及我要导入的 Swift class。

我尝试在我的 Obj-C 源代码中对 class 进行前向 @class 声明,但这只是删除了警告并延迟了错误,直到我尝试构建。在我的构建设置中启用了模块。如果有人有一些见解,将不胜感激。

编辑: 如果我为我的项目手动将源文件添加到 Build Phases -> Compile Sources,那么一切正常——但这当然违背了使用 pod 的目的。所以这似乎是一个 XCode 搜索路径问题。

只有 public classes 和方法被发布以供其他模块使用。为确保 Objective-C 兼容性,您可以使用 @objc 注释您的 class 并继承 NSObject.

例如,将您的 class 定义更改为:

class MyClass {
    func sayHello() {}
}

收件人:

@objc public class MyClass: NSObject {
    public func sayHello() {}
}

要在 XCode 7 上的 Objective-C 中使用 Swift 框架(iOS 8+),您只需像在 [=40= 中一样导入它们] 使用 @import 语句:

@import MyModule;

你所有的 public class 都可用。


有关 Swift and Objective-C in the Same Project Apple 文档的 'Importing External Frameworks' 和 'Using Swift from Objective-C' 部分的更多信息。

我最终找到了解决方案。 Swift pods 似乎没有添加到 Project-Name-Swift.h,而是为每个模块生成一个单独的 Swift header。

我需要做的是导入以下 Swift header 文件。
#import "Module_Name/Module_Name-Swift.h"

redent84 指出了我想不到的另一个解决方案。您只需像在 Swift 中一样将以下内容放入您的 Objective-C 源代码中。
@import Module_Name;
这可能等同于 swift header 去掉糖后的导入。