无法向Swift公开一个Objective-C类,后者又导入Swift代码

时间:2015-08-10 09:11:29

标签: ios objective-c swift import

我在我的Swift项目中混合Objective-CiOS代码,我有一个Objective-C课程(让我们称之为&# 34; ObjCClass"),我使用Swift类,所以我将这个导入行添加到.h文件中:

#import "MyApp-Swift.h"

另一方面,我需要使用" ObjCClass"某个Swift课程中的课程(让我们说" SwiftClass"),所以在" MyApp-Bridging-Header.h"文件我试图添加:

#import "ObjCClass.h"

但编译器给了我两个错误,一个在#34; MyApp-Bridging-Header.h"文件,以及" ObjCClass.h"的#import "MyApp-Swift.h"中的另一个文件。文件。最后,错误显示failed to import bridging header

我对Swift我的Objective-C不使用Swift代码的课程有任何疑问,我是否尝试做一些不可能的事情?我的意思是,是否不允许在Swift类中使用Objective-C类,而后者又会使用另一个Swift类?如果这可能,我怎么能解决这个问题呢?

谢谢

2 个答案:

答案 0 :(得分:0)

我不了解您的所有问题,但您可以在Swift项目中使用Objective-c类,如下所示:

  • in" 构建设置"搜索" bridg"然后添加你的" Bridging-Header.h"文件(相对于项目的完整路径)" Objective-C桥接标题"
  • 你的" Bridging-Header.h"文件可能如下所示:

    a1.getA() == a2.getA()

你可以在Objective-c项目中使用Swift类:

  • 添加@class yourClass;在你的.h

    #import <yourFramework>
    #import "yourClass.h"
    
  • 添加#import&#34; yourClass-Swift.h&#34 ;;在yout .m

此处有更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

答案 1 :(得分:0)

此问题与在ClassB.h中尝试#import ClassA的头文件时相同,同时在ClassA.h中导入ClassB的头文件 - 您无法进行循环导入。

这里的解决方案与纯粹的Objective-C项目相同。将您的#import "MyApp-Swift.h"移到ObjCClass.m的顶部,而不是.h。同时,如果你需要在ObjCClass的头文件中引用任何Swift类,而不仅仅是在.m中,那么在ObjCClass.h中包含那些带有@class声明的类。

如果您执行上述操作,您的编译器问题将会消失。您无需更改桥接标题中的任何内容。