Swift类没有出现在生成的<project_name> Swift.h头文件

时间:2016-03-17 07:55:05

标签: xcode cocoapods

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

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

我试图导入的Swift类是UITableViewCell的扩展,它被声明为公共类。它没有在源代码中使用@objc注释声明的类,但是自己添加它似乎也没有什么区别。

在我的Obj-C源代码中,我有#import "ProjectName-Swift.h",(使用我的实际项目名称)但是我的Obj-C文件在清理和构建之后仍然无法识别该类。我已经检查过Swift头文件是否存在(并且确实存在)但是在检查时它似乎没有提到我正在尝试导入的Swift类。

我尝试在我的Obj-C源代码中向该类添加一个前向@class声明,但这只删除了警告并延迟了错误,直到我尝试构建。模块在我的构建设置中启用。如果有人有一些见解,我们将非常感谢您的帮助。

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

2 个答案:

答案 0 :(得分:3)

仅发布要从其他模块使用的公共类和方法。为确保Objective-C兼容性,您可以使用@objc为您的班级添加注释并继承NSObject

例如,从以下位置更改类定义:

class MyClass {
    func sayHello() {}
}

要:

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

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

@import MyModule;

您的所有公共课程都将可用。

Swift and Objective-C in the Same Project apple docs中“导入外部框架”和“使用Objective-C中的Swift”部分的更多信息。

答案 1 :(得分:0)

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

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

redent84指出了另一种解决方案。您只需要像在Swift中一样将以下内容放在Objective-C源代码中。
@import Module_Name;
一旦糖被剥离,这可能相当于快速的头部进口。