如何限制Objective C中枚举值的可见性?

Posted

技术标签:

【中文标题】如何限制Objective C中枚举值的可见性?【英文标题】:How to limit visibility of enum values in Objective C? 【发布时间】:2011-11-15 09:11:33 【问题描述】:

在 Objective C 中,当你定义一个枚举时,所有的枚举值在任何地方都是可见的,并且会阻塞全局命名空间。

我想让它成为 Java 风格并强制枚举只能通过枚举类型名称访问,例如与

typedef enum

MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY, NUM_OF
 Day;

我想确保 简单地调用MONDAY 会产生编译错误或至少是警告,访问枚举值的唯一方法是Day.MONDAYDay::MONDAY[Day MONDAY] 或...

在 Java 中我使用枚举或接口,但这在 Objective-C 中可行吗?

如果不是,那么我必须将所有枚举命名为:DAY_MONDAY, DAY_TUESDAY...,以便更容易在自动完成弹出窗口中搜索它们。

【问题讨论】:

【参考方案1】:

这只是一种解决方法,但是您可以使用许多类方法创建自定义接口(这样就无需创建实例),其中每个方法都代表一个常量。

只有在您要求时才能访问常量(即Day.MONDAY[Day MONDAY])。

【讨论】:

没有 C++/Java 风格的静态类变量,对吧?这就是为什么类方法..谢谢你的想法,它会起作用,但当然定义所有这些方法会太多打字..

以上是关于如何限制Objective C中枚举值的可见性?的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中前向声明枚举

Android 可访问性将对讲限制为仅读取可见文本

如何在 Objective-C 中使用 Swift 字符串枚举?

Objective-C:你在你的代码中使用@private 可见性/访问修饰符吗?

Js中的Object.defineProperty

使用库、二进制文件和模块文件限制项目中的模块功能可见性