我在 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/