objective-c - Objective-C 中有类似 Java 枚举的东西吗?

标签 objective-c enums

我在 Objective-C 中有一个情况,Java 风格的枚举会非常有用。我有一组图层类型,每个图层都有自己的关联持久性值(以秒为单位存储)。我想将这些层类型保存在一个枚举中,因为它们太相似而无法分成单独的类,如下所示:

typedef enum {
    ExplosionLayerType,
    FireworkLayerType,
    FireLayerType,
    FireJetLayerType
} FXLayerType;

在 Java 中,我可以很容易地将这两个值与如下内容相关联:

public enum FXLayerType {
    Explosion(3),
    Firework(6),
    Fire(7),
    FireJet(-1);

    private int persistence;

    FXLayerType(int persistence) {
        this.persistence = persistence;
    }
}

有没有一种简单的方法可以在 Objective-C 中创建像这样的轻量级类,或者需要求助于更原始的方法?

编辑:

许多人建议这样做:

typedef enum {
    ExplosionLayerType = 3,
    FireworkLayerType = 6
} FXLayerType;

这对我不起作用,因为我可能有这样的东西(Java 风格的枚举):

Explosion(3),
Firework(6),
Dust(3);

在 Java 中,Dust 和 Explosion 将被视为唯一值,但使用 C 枚举直接赋值会将它们视为完全相同。

最佳答案

如果您只想要一个类型和值的原始容器,请考虑这种方法:

typedef struct FXLayerValue {
  FXLayerType type;
  int value;
} FXLayerValue;

然后,如果事情变得复杂或更好地动态处理,类层次结构可能值得考虑。警告:如果您有大量对象要保存和/或创建,则 objc 类型会过度杀伤并降低性能。

不幸的是,我的 Java-Fu 还不够好,无法了解枚举的所有语言差异。

关于objective-c - Objective-C 中有类似 Java 枚举的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247024/

相关文章:

java - Spring 2.5 中枚举映射和依赖注入(inject)

java - 枚举性能中的单例

ios - 如何使用正文和 URL 中的参数制作经过身份验证的 POST?

ios - 无法使用 NSDictionary 的内容填充 UITableViewCells

objective-c - 在 iOS 应用程序中访问 SQL 数据库

c# - 按枚举类型自定义检查器

ios - 将嵌套的枚举值转换为一个变量以作为函数参数传递

python - 创建一个带有位域的枚举

ios - 合并并减少但等待每个信号完成后再订阅下一个信号

ios - 子类可以使用父类(super class)Ios的委托(delegate)方法吗