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 对象在桥接头文件中添加后无法编译的主要内容,如果未能解决你的问题,请参考以下文章
在“发布”构建配置中看不到在桥接头中导入的头,但在“调试”构建配置中可见
在集成 pod 文件之前放置在桥接头中的第 3 方代码该怎么办