【问题标题】:NS_ENUM object not compile after added in bridging header fileNS_ENUM 对象在桥接头文件中添加后无法编译
【发布时间】: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吗?

标签: objective-c swift bridging-header objc-bridging-header


【解决方案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 已经导入了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多