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

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

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

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

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


当前回答

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

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

其他回答

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

#进口“ProductModuleName-Swift.h”

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

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

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

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

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

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

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

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

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

文档:将Swift导入Objective-C

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

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

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

#import <FrameworkName/FrameworkName-Swift.h>

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