NS_ENUM 对象在桥接头文件中添加后无法编译

Posted

技术标签:

【中文标题】NS_ENUM 对象在桥接头文件中添加后无法编译【英文标题】:NS_ENUM object not compile after added in bridging header file 【发布时间】:2018-05-25 11:26:46 【问题描述】:

我有一个枚举,它在 constant.h 文件(Objective-C)中

typedef NS_ENUM (NSInteger, EEFieldType) 
  EEFieldTypeHighFields = 1,
  EEFieldTypeMediumFields = 2,
  EEFieldTypeLowFields = 3
;

我有一个桥接文件,它连接到 swift 代码并导入一个文件名为 profile 的文件。

(ModuleName-Bridging-Header.h)

#import "Profile.h" 

使用以下方法的配置文件文件未在代码中编译。

- (EEFieldType)fieldTypeByPFType;

错误:应为 EEFieldType 上的类型。

【问题讨论】:

您能否重新定义您的问题,回答起来很混乱。我不知道到底是什么问题 @SurbhiGarg 重构问题可能是你会明白我想要传达的内容。 Profile.h 引用EEFieldType,在constant.h 中定义,Profile.h 是否导入constant.h?如果不是,为什么不呢?如果是,您需要提供更多信息,以便人们能够帮助您。 @CRD 是的,实际上“constant.h”我已添加到全局定义的 pch 文件中。 所以如果我正确地跟随你 Profile.h 不是导入 constant.h 而是你依赖于 Xcode 的预编译标头 (pch) 工具 Objective-C。没有 Swift 等效的 pch 文件,并且在一段时间内不鼓励在 Objective-C 中使用 pch 文件以支持模块。你试过直接在Profile.h中导入constant.h吗? 【参考方案1】:

[答案从 cmets 移动和扩展]

在 cmets 中添加了有关使用预编译头文件 (.pch) 的附加信息,您的问题归结为 Swift 不使用 .pch 文件 - 它们是 Objective-C 编译器的功能。

在 Objective.c 中,Profile.h 编译为它所依赖的标头 constant.h,由 .pch 导入。

在 Swift 中,Profile.h 会产生缺失类型错误,因为它没有导入定义类型的 constant.h

只需将constant.h 导入Profile.h

注意:这样做不仅适用于 Swift,它还适用于 Objective-C——.pch 功能是加速标头处理的编译器选项,并且 Objective-C 编译器将继续使用它,当它在Profile.h 中看到constant.h 导入它会简单地跳过它,因为.pch 已经导入了它。

【讨论】:

以上是关于NS_ENUM 对象在桥接头文件中添加后无法编译的主要内容,如果未能解决你的问题,请参考以下文章

在桥接头中导入头文件导致的 Swift 编译器错误

在“发布”构建配置中看不到在桥接头中导入的头,但在“调试”构建配置中可见

将桥接头添加到现有目标项目中时出错

在集成 pod 文件之前放置在桥接头中的第 3 方代码该怎么办

使用 cocoapods 的 PayPal-iOS-SDK 在桥接头中引发错误

在桥接头中导入不适用于特定的 Parse Facebook