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

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

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

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

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


当前回答

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

其他回答

只是提醒那些在项目名称中使用“。”的人。对于Swift版本的桥接头文件,Xcode将用下划线“_”替换“。”。奇怪的是,生成的Bridging-Header.h不会用下划线替换句点。

例如,一个名为My的项目。项目将具有以下桥接头文件名。

Bridging-Header.h(自动生成)

My.Project-Bridging-Header.h

Swift.h

My_Project.h

我希望这能帮助那些像我一样用了大姨妈却被困住的人。该文件可以在以下位置找到。

麦金塔HD / \用户/用户/ Library /开发商Xcode DerivedData /我。Project-fntdulwpbhbbzdbyrkhanemcrfil /构建/ Intermediates构建Debug-iphonesimulator /我的项目。项目构建- DerivedSources。

当心

Jon

如果你以前能够构建一个项目,没有与“ProductModuleName-Swift.h”相关的问题,没有发现错误,现在你又得到了那个讨厌的错误,原因可能是你最近的更改。

对我来说,这是(偶然)错误的。swift文件编码。恢复更改并手动恢复即可完成这项工作。

我想再补充一个你可能会发现问题的原因——我正在创建一个混合了Swift和Objective-C代码的框架。我无法在框架外导入Swift类-我检查了-Swift.h文件,它正在生成但为空。

问题变得非常非常简单——我没有将我的任何Swift类声明为public!一旦我将public关键字添加到类中,我就可以从框架内外的类中使用它们了。

同样值得注意的是,在框架内(只有在。m文件内,另一个答案提到),我必须导入-Swift.h文件:

#import <FrameworkName/FrameworkName-Swift.h>

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

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

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

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

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