在Objective-C模块中使用Swift时无法构建Objective-C模块

时间:2019-04-12 12:22:58

标签: ios objective-c swift xcode bridging-header

在iOS应用程序中,我有一个子项目(不是cocoapods),其中包含一个swift文件和ObjC文件(该swift文件使用)。 XCode自动创建了桥接文件,但由于在框架中不允许进行明显的桥接,因此无法构建它。我使用的解决方法是将Objective-C标头添加到伞形文件中,并且可以正常工作。现在,我需要使用ObjC的swift类。我将define module设置为YES,即生成的文件Framework-Swift.h。但是当我尝试将其导入Objective-C时,我得到了

  

无法构建Objective-C模块

经过一些Google搜索,我得到的最接近的答案是:

  

啊,真是的。看起来您正在构建混合的Swift和Objective-C   pod-如果是这种情况,Xcode将尝试导入    在生成的-Swift.h标头中。   您需要手动创建标题,并为   您想向Swift公开的Objective-C类。

     

CocoaPods自动生成一个伞形标头并将其导入   在.modulemap中,但是Xcode在生成   -Swift.h标头

但是我不确定需要手动创建什么标题。 关于在Objective-C框架中使用Swift的任何想法或指示吗?两种方式?

2 个答案:

答案 0 :(得分:1)

a great and simple article结束了这种情况:

  1. DEFINES_MODULE =是
  2. 要在Swift中使用ObjC类,请创建一个桥接标头并在构建设置中指定其路径
  3. 要在ObjC中使用Swift类,请在#import <ModuleName/ModuleName-Swift.h>文件中使用*.m(如果需要,请在@class SwiftClass;文件中使用*.h前向声明)
  4. 让objc可以看到Swift类及其成员
    1. NSObject继承您的课程
    2. 在其前面加上@objcMembers
    3. 使班级及其成员成为public

答案 1 :(得分:0)

在包含多个目标的Swift项目中使用Swift Pod时,我也遇到类似的问题。根本没有Objective-C代码。我试图清除构建文件夹,pod缓存,派生数据-无效。

解决方案:

打开包含模块代码的目标的“构建设置”。将“安装Objective-C兼容性标题”设置为“否”

enter image description here