如何在Objective-C中访问Swift定义的嵌套enum
核心原因
Objective-C 本身没有嵌套枚举的语法支持,Swift 中标记了 @objc 的嵌套枚举导出到 Objective-C 时,会自动做名称平铺处理,拼接规则为 父枚举名称 + 子枚举名称 + 子枚举case名称。
正确访问写法
针对你给出的枚举定义,正确的访问方式如下:
// 访问子枚举case PARENT_ENUMCHILD_ENUMCHILD_ENUM_CASE; // 声明子枚举类型变量示例 PARENT_ENUMCHILD_ENUM childCase = PARENT_ENUMCHILD_ENUMCHILD_ENUM_CASE;
可选优化:自定义导出名称
如果觉得平铺后的名称太长,可以在 Swift 中通过 @objc(自定义名称) 注解指定枚举导出到 Objective-C 时的名字,示例如下:
@objc enum PARENT_ENUM: Int { case test // 自定义子枚举导出到ObjC的类型名 @objc(PARENT_CHILD_ENUM) enum CHILD_ENUM: Int{ // 自定义case导出到ObjC的名字 @objc(PARENT_CHILD_CASE) case CHILD_ENUM_CASE } }
修改后在 Objective-C 中可以直接用更简洁的名称访问:
PARENT_CHILD_CASE; PARENT_CHILD_ENUM childCase = PARENT_CHILD_CASE;
验证方式
如果不确定导出后的名称,可以直接打开 Xcode 自动生成的 Swift-ObjC 桥接头文件(命名规则为 你的项目名-Swift.h),搜索父枚举/子枚举名称,即可看到完整的导出定义,直接复用即可。
内容的提问来源于stack exchange,提问作者Aaban Tariq Murtaza
相关产品推荐
相关产品推荐

