swift - 将 'ClassName' 重新定义为生成 header 中的不同类型符号

标签 swift objective-c xcode forward-declaration bridging-header

我创建了一个 Swift 枚举作为 Int(因此它可以与 Objective-c 一起使用)。

当我构建项目时,一切都很好。但是,一旦我尝试将类导入到 .h 文件中(使用前向声明 @ClassName),生成的头文件就会出错,将“ClassName”重新定义为不同类型的符号

查看生成的 .h 文件,我可以看到它生成了新类型,如下所示:

typedef SWIFT_ENUM(NSInteger, ClassName, closed) {
  type1 = 1,
  type2 = 2,
};

它在 ClassName 下划线表示它已被重新声明。但是,它不存在于头文件中的其他位置(进行搜索,它只出现一次),并且只在 swift 文件中声明一次。

对正在发生的事情有什么建议吗?

最佳答案

枚举不是 Objective-C 中的类,因此您需要在 .h 文件中使用 typedef 而不是前向声明:

typedef NS_ENUM(NSInteger, ClassName);

然后在.m文件中,需要导入Module-Swift.h文件。

关于swift - 将 'ClassName' 重新定义为生成 header 中的不同类型符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68808688/

相关文章:

ios - 如何将字符串(例如 "xPM - yPM")拆分为两个字符串,Swift

ios - 编辑 CollectionViewCell 的宽度

ios - 是什么导致了这个 iOS 崩溃? UICollectionView 接收到具有不存在的索引路径的单元格的布局属性

ios - 如何在 iOS 中设置文本格式

ios - ld : file too small for architecture i386

iOS 13 分段控制 : Remove swipe gesture to select segment

swift - swift 抛出可选错误最干净的方法是什么?

ios - 如何在调试器中查看 Swift 变量的地址

ios - 提交到应用商店时可以设置多低的部署目标是否有限制?

objective-c - 如何在 MAC OS X 应用程序中更改 NSTableView 标题背景颜色?