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

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

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

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

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


当前回答

你必须在Objective-C类中导入一个头文件,它是:

#import “ProductModuleName-Swift.h”

它是自动生成的,在引用中它说:“目标中的任何Swift文件都将在包含此import语句的Objective-C .m文件中可见。”

其他回答

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

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

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

项目中不创建实际文件([ProductModuleName]-Swift.h)。Cmd +单击导入,要么实时生成(并在内存中),这样你就可以看到链接是如何完成的,要么在Xcode缓存目录中打开一个文件,但它不在项目目录中。

你需要将定义模块项目道具(在目标的构建设置中)设置为Yes,如果你的模块名中有空格或破折号,在[ProductModuleName]- swift .h文件的所有导入中使用_。

你可以在所有使用swift类型的.h和.m文件中导入它,也可以在.pch文件中导入它。

所以如果我的模块(项目)被命名为“测试项目”,我将像这样导入它,在我的项目的。pch文件中(就在那里):

#import "Test_Project-Swift.h"

项目必须有一个不包括空格的模块名。 “定义模块”必须在“生成设置”中的“打包”下设置为“是”。 注释掉了#import语句:

如果您在导入“ProductModuleName-Swift.h”时仍然有错误,那么

/ / #进口“ProductModuleName-Swift.h”

这显示了我的Swift代码中的一堆其他错误。

一旦我修复了这些新的错误,并成功地获得了源代码构建,我取消了#import的注释,没错!头文件被创建并正确导入:)

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

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

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

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

文档:将Swift导入Objective-C