我最近一直在努力将Swift添加到一个现有的项目中,以便在现实世界中进行尝试。

在向项目中添加Swift源文件时,我对获得“桥接头”没有任何问题,也就是说,Objective-C到Swift。

但是*-Swift.h头文件应该公开Swift类,无论是标记为@objc的类还是ObjC类的子类,都找不到:-(

在我的主应用程序代码(仍然是Objective-C)中,我没有看到任何关于如何使用我的新子类的具体说明,用Swift编写。

我是首席开发人员的应用程序有一个相当大的代码库(70.000行),所以一次性过渡它是不可能的。


当前回答

这里是没有生成的moduleName-Swift.h的另一个变体。

我决定在我的项目中包含IOS图表,但不想将源代码混合在同一个目录中,所以我将图表项目文件夹放在我代码的项目文件夹旁边。我将图表项目拖到项目的导航栏中,并将框架包含在项目目标的“通用项目设置”的“嵌入式二进制文件”列表中,并在“构建选项”部分的“构建设置”选项卡中将“嵌入内容包含Swift代码”开关设置为“是”。

我的项目的moduleName-Swift.h文件永远不会生成,不管这里建议了什么其他开关或设置。最后,使用Lou Z的方法查找-Swift.h文件,我看到在我的项目的xcode Build目录Charts.framework/Headers/深处生成了一个Charts-Swift.h文件

使用Daniel Gindi的ios-charts Swift包而不包括项目源目录中的代码的解决方案是添加:

#import "Charts/Charts-Swift.h"

到记录项目数据的模块。

其他回答

有时你只需要在obj-c .m文件上取消设置,然后重新设置目标成员。

好的,这些都是你真正需要的东西!

1.删除您添加的所有swift文件,并编译代码,没有任何错误。

----------

----------

2.转到“Projects”构建设置,并设置产品模块名称。 项目必须具有不包括空格的产品模块名称。

----------

----------

3.“定义模块”必须在“生成设置”中,在“打包”下,在项目中设置为“是”,而不是“目标”!

----------

----------

4.现在创建一个swift文件或视图控制器,在file-> newFile->中

----------

----------

它会请求创建一个桥接头,允许它创建一个桥接头。 如果你拒绝了一次,你必须手动添加一个-Bridging-Header.h

5.在控制器中添加@objc,告诉编译器有一些swift文件需要暴露给objecvec

----------

----------

6.构建项目并在任何objective - c控制器中导入#import "-Swift.h",它就可以工作了!你可以Command-click它来查看实际的文件!

----------

----------

希望这能有所帮助!

现在它起作用了。

项目必须具有不包括空格的产品模块名称。 “定义模块”必须在“生成设置”中的“打包”下设置为“是”。

最后的作品。感谢大家的帮助:-)

我发现我必须在它生成文件之前修复所有构建错误。

对我来说,问题是这是一个先有鸡还是先有蛋的问题,因为在我注释掉#import语句之前,我没有看到任何构建错误:

/ / #进口“ProductModuleName-Swift.h”

这显示了我的Swift代码中的一堆其他错误。

一旦我修复了这些新的错误,并成功地获得了源代码构建,我取消了#import的注释,没错!头文件被创建并正确导入:)

我很难确定我的模块名/objective-c对swift头文件的导入。我在这里也读了很多文章。

但你的项目名称的最终答案,包括所有的特殊字符(是它'。’或数字或空格)-你可以在目标的Build Settings下的“Product Module Name”中找到适合你的文本。

例如,我的目标名称以数字-“1mg”开头,上面提到的字段显示“_mg”作为我的模块名。

所以我使用#import "_mg-Swift.h",它工作了。