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

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

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

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

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


当前回答

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

其他回答

我很难确定我的模块名/objective-c对swift头文件的导入。我在这里也读了很多文章。

但你的项目名称的最终答案,包括所有的特殊字符(是它'。’或数字或空格)-你可以在目标的Build Settings下的“Product Module Name”中找到适合你的文本。

例如,我的目标名称以数字-“1mg”开头,上面提到的字段显示“_mg”作为我的模块名。

所以我使用#import "_mg-Swift.h",它工作了。

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

#import “ProductModuleName-Swift.h”

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

现在它起作用了。

项目必须具有不包括空格的产品模块名称。 “定义模块”必须在“生成设置”中的“打包”下设置为“是”。

最后的作品。感谢大家的帮助:-)

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

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

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

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

只是提醒那些在项目名称中使用“。”的人。对于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