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

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

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

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

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


当前回答

我找到了这个解决方案

创建SwiftBridge.h 导入" ProductModuleName-Swift.h " 将此.h文件公开(重要)选择该文件->在“显示文件检查器”中(右栏)->将其公开

现在你可以

#import "SwiftBridge.h"

而不是ProductModuleName-Swift.h

这是一个变通的解决方案,在下一个版本的Xcode中,我认为这个问题会得到解决。 祝你好运

其他回答

在我的情况下,我必须将部署目标设置为至少“OS X 10.9”,并且-Swift.h头文件会自动生成。请记住,当您更改部署目标版本时,您可能会得到许多弃用警告,特别是当您有一个旧的和非常大的Objective C代码库时。在我们的例子中,我们在XIB文件和视图类中也有很多工作要做。

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

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

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

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

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

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

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

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

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

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

#进口“My_Project-Swift.h”

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