首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C中的枚举管理

Objective-C中的枚举管理
EN

Stack Overflow用户
提问于 2013-05-22 14:42:00
回答 2查看 1.2K关注 0票数 1

我需要关于如何在Objective-C中管理枚举的帮助或一些指导/最佳实践。我来自C++/C#领域,在那里我可以显式地调用一个枚举,比如:

代码语言:javascript
复制
mycharacter.type = EnumType.enumValue;

THere没有冲突,因为我先调用枚举类型,然后调用枚举值。在Obj-C中,枚举是作为typedefs创建的,因此它们都必须使用唯一的编号进行索引,否则在运行时会出现问题。我最初在它们各自的类中创建枚举,没有起始值,所以所有枚举最初都是零。我花了2-3个小时尝试解决Cocos2D/Box2D中的一些简单的碰撞检测问题,后来发现这是由于枚举没有唯一的值,所以碰撞没有正常发生。

如果有像在C#/C++中一样调用枚举的方法,请告诉我,否则请给我一些知识库或最佳实践文档,因为我不是C开发人员。

请给我建议。

EN

回答 2

Stack Overflow用户

发布于 2013-05-22 14:49:11

Objective-C是C的超集。你有C风格的枚举,它是在全局命名空间中声明的有效的C++枚举:

代码语言:javascript
复制
enum {
 MyConstant = 1
};

下面是一个来自AppKit的例子:

代码语言:javascript
复制
enum {
    NSLayoutRelationLessThanOrEqual = -1,
    NSLayoutRelationEqual = 0,
    NSLayoutRelationGreaterThanOrEqual = 1,
};
typedef NSInteger NSLayoutRelation;

枚举值只是静态整数--您不能像对象那样对它们进行消息传递(在C++中也是如此),也不能询问它们的名称或作用域。您可以转换/转换为其他数字或指定其宽度(ObjC中的扩展名)。

由于枚举没有唯一值,因此冲突没有正确发生

如果不赋值,那么它们将被自动赋值,比前面的枚举值大1。

因此,如果你想要一个更灵活的对象,你可能需要考虑创建一个类或者使用一个集合。C枚举非常有用,而且非常基础。

请注意,您可以在Objective-C中以相同的翻译使用C++ --它被称为Objective-C++。

票数 3
EN

Stack Overflow用户

发布于 2013-05-22 15:04:58

它们是C枚举。它们不是对象。它们适用于轻量级命名选项参数和位域掩码选项,也适用于C切换条件。您会发现它们在Objective-C中以这种方式使用。不应该有冲突,因为它们只是const整数的typedefs。要在Xcode中有效地使用它们,请确保为枚举和成员添加有意义的前缀和名称。这为您提供了有用的代码完成功能。

也可以看看有用的宏NS_ENUM和NS_OPTION NSHipster博客有一个很好的发帖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16685084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档