【发布时间】:2012-02-12 06:52:07
【问题描述】:
我在 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 枚举直接赋值会将它们视为完全相同。
【问题讨论】:
-
是否可以将 int 值用作枚举值(有关自定义枚举值的示例,请参阅 this answer)?
-
@perelman:嗯,我不知道这个功能。这绝对是可能的,虽然感觉有点骇人听闻。
-
@perelman:再想一想,不,我不能,因为多个层类型可能共享相同的持久性值,但必须保持唯一。
-
@JakeKing 究竟是如何工作的?当值
3从持久存储反序列化时,你怎么知道它应该变成DustLayerType而不是ExplosionLayerType? -
@hamstergene:持久性值与持久性存储无关,如果令人困惑,抱歉。这只是它应该在我的游戏中“存活”多长时间。
标签: objective-c enums