2015-01-02 14 views
1

我有一个混合了Swift和Objective-C的项目。Swift和Objective C:Project-Swift.h和Project-Bridging-Header.h冲突

我目前正试图从Objective-C编写的View Controller中调用Swift中的方法。

为了公开该方法,我将View Controller的头添加到了Bridging-Header.h文件中。

但是,视图控制器引用了Project-Swift.h,在编译桥接头时显然“不存在”。如果我删除Project-Swift.h的内容,项目编译,但是然后我无法从Objective-C端访问我需要的Swift功能。

确切的错误是:

"/Project/ViewController.h:10:9: error: 'Project-Swift.h' file not found 
#import "Project-Swift.h" 
     ^
<unknown>:0: error: failed to import bridging header '/Project/Project-Bridging-Header.h' 

我似乎有一个鸡和蛋的问题。

关于如何解决这个问题的任何想法?我可以在不包含桥接头的情况下调用Objective-C方法吗?

回答

4

我建议你在.m文件里包含Project-Swift.h文件,所以在ViewController.m。如果您在头文件中定义了任何您需要的类,只需使用@class MyClassFromProjectSwift即可添加远程类声明。

+1

感谢您的快速回复。向前声明这些类很好用(谢谢!)但是我无法使用此方法向前声明协议。 (例如,'@protocol SecondSwiftControllerDelegate;'产生警告'无法找到协议定义')。 –

+2

我希望你没有你需要的协议,因为可悲的是你不能转发声明那些协议。 我会尝试在ObjC中使用此协议声明。事情是,你正在尝试做什么,你正在导致一个包含循环。编译器需要桥接头才能编译Swift部分,并且需要编译Swift部分才能获得ObjC部分的协议定义。 –