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

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

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

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

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


当前回答

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

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

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

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

其他回答

现在它起作用了。

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

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

我找到了这个解决方案

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

现在你可以

#import "SwiftBridge.h"

而不是ProductModuleName-Swift.h

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

好的,这些都是你真正需要的东西!

1.删除您添加的所有swift文件,并编译代码,没有任何错误。

----------

----------

2.转到“Projects”构建设置,并设置产品模块名称。 项目必须具有不包括空格的产品模块名称。

----------

----------

3.“定义模块”必须在“生成设置”中,在“打包”下,在项目中设置为“是”,而不是“目标”!

----------

----------

4.现在创建一个swift文件或视图控制器,在file-> newFile->中

----------

----------

它会请求创建一个桥接头,允许它创建一个桥接头。 如果你拒绝了一次,你必须手动添加一个-Bridging-Header.h

5.在控制器中添加@objc,告诉编译器有一些swift文件需要暴露给objecvec

----------

----------

6.构建项目并在任何objective - c控制器中导入#import "-Swift.h",它就可以工作了!你可以Command-click它来查看实际的文件!

----------

----------

希望这能有所帮助!

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

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

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

#import <FrameworkName/FrameworkName-Swift.h>

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