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

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

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

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

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


当前回答

如果您正在使用Cocoapods之类的东西(并且在工作空间而不是项目中工作),请尝试在打开工作空间和构建之前打开项目并构建它。YMMV。

其他回答

如果你像我一样,你可能把标题名搞错了。在我的头猛击了一段时间后,我在DerivedData中寻找文件,果然它在那里。在我的设置(使用标准派生数据文件夹,我相信):

cd ~/Library/Developer/Xcode/DerivedData
find * -iname '*Swift.h'

会找到的。如果文件夹中没有匹配的内容,Xcode就不会生成它。

我使用的Xcode版本6.2 (6C86e)

如果Xcode实际上生成了你的-Swift.h头(在DerivedData的深处),但它没有引用你的Swift类,请确保你也定义了一个桥接头。我阅读文档的方式暗示我只需要从Swift调用Objective-C,但似乎从Objective-C调用Swift也是必要的。

请看我的回答:https://stackoverflow.com/a/27972946/337392

编辑:这是因为公共和内部访问修改器,正如我最终在苹果文档中发现的解释:-

默认情况下,生成的头包含Swift接口 用公共修饰符标记的声明。它还包含了 如果你的应用目标有 Objective-C桥接头。

文件正在生成,但Xcode无法找到它(我使用Lou Zell的答案来证明它正在生成)。

这是我对混合ObjC/Swift框架的修复(Xcode 9.2):

通过在finder (TargetName-Swift.h)中搜索,在DerivedData中找到预期生成的文件 拖到你的项目在XCode和UNCHECK复制文件。 点击XCode中的文件,打开文件检查器(右边面板的第一个选项卡)。 将位置从相对于组更改为相对于构建产品

前两个步骤应该可以让你很好地构建和使用你的项目,但最后两个步骤允许它在其他计算机上工作(即在团队项目中协作时仍然可以工作)。

这里是没有生成的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"

到记录项目数据的模块。

请允许我分享我在一个旧的objc项目中尝试使用Swift的经验。我不需要将定义模块设置为YES。

在我的情况下,我需要手动确保有一个objc桥接头。在我的构建设置中只出现了生成的接口头名称。

这导致生成了一个MyApp-Swift.h文件,但没有任何Swift类的痕迹。

苹果文档说,当你添加你的第一个swift文件时,会提示你创建一个桥接头。我没有。我手动添加了一个MyApp-Bridging-header.h文件,并在“Objective-C Bridging Header”字段中指向它。这使得我的MyApp-Swift.h文件被我的Swift类填充。

文档:将Swift导入Objective-C