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

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

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

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

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


当前回答

最重要的是这个文件是不可见的!!至少在Xcode6 beta5中是这样的。在您的工作空间中不会有这样一个名为“YourModule-Swift.h”的文件。只需确保模块名称和定义模块设置为yes,并在Objective-C类中使用它。

其他回答

我有一个类似的问题,发现你只能添加

#进口“ProductModuleName-Swift.h”

到obj-c .m文件,而不是找到伞头的.h文件

如果项目模块名称中有空格,则必须用下划线替换空格。

例如,如果你的项目名称是“My project”,你可以使用:

#进口“My_Project-Swift.h”

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

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

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

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

这个答案解决了你可能已经有一些Objective-C代码调用Swift类,然后你开始收到这个错误的用例。

如何解决问题

接下来的步骤最终为我解决了所有问题。我在上面读到有人提到“鸡和蛋”,正是这个概念让我想到了这个过程。这个显式的过程表明,在生成头文件之前,必须删除任何引用Swift类的Objective-C代码。

Comment out the #import "ProductModuleName-Swift.h" statement in your Objective-C implementation file Comment out any references in the Objective-C implementation file to Swift Classes Clean & Build Resolve all errors/warnings Remove the comment on the #import "ProductModuleName-Swift.h" statement Clean & build (successfully or fix any remaining errors, verify that you are not referencing any Swift classes in Objective-C at this point. If so temporarily comment these out) Verify that "ProductModuleName-Swift.h" is generated by Cmd-Clicking on the class name of the #import "ProductModuleName-Swift.h" statement Remove the comment on the code referencing Swift classes in the Objective-C implementation file. Clean & Build as normal (the "ProductModuleName-Swift.h" should be generated and your Objective-C code referencing Swift Classes can be used as normal)

注意:在执行此过程时,关于将空格更改为下划线和将定义模块更改为YES的答案仍然适用,正如Apple文档中指定的规则一样。

桥接头路径

在一个错误中,在构建过程中没有找到文件ProductModuleName-Bridging-Header.h。这一事实产生了一个错误

< unknown>:0:错误:桥接头 “/Users/Shared/Working/abc/abc- bridging - header .h”不存在

对错误的进一步检查表明,该文件永远不会存在于所描述的位置,因为它实际上位于(错误的路径)

' /用户/共享/工作/ abc / abc / abc-Bridging-Header.h’。快速搜索目标/项目构建设置,手动进行更正,abc-Swift.h文件再次自动生成。

我也有同样的问题。在添加你的第一个Swift文件之前,似乎你必须调整设置(定义模块和产品模块名称)。

如果你之后这样做,即使你添加更多的Swift文件或删除Swift文件并创建一个新的Swift文件,“*-Swift.h”文件也不会为这个项目生成。