我需要关于如何在Objective-C中管理枚举的帮助或一些指导/最佳实践。我来自C++/C#领域,在那里我可以显式地调用一个枚举,比如:
mycharacter.type = EnumType.enumValue;THere没有冲突,因为我先调用枚举类型,然后调用枚举值。在Obj-C中,枚举是作为typedefs创建的,因此它们都必须使用唯一的编号进行索引,否则在运行时会出现问题。我最初在它们各自的类中创建枚举,没有起始值,所以所有枚举最初都是零。我花了2-3个小时尝试解决Cocos2D/Box2D中的一些简单的碰撞检测问题,后来发现这是由于枚举没有唯一的值,所以碰撞没有正常发生。
如果有像在C#/C++中一样调用枚举的方法,请告诉我,否则请给我一些知识库或最佳实践文档,因为我不是C开发人员。
请给我建议。
发布于 2013-05-22 14:49:11
Objective-C是C的超集。你有C风格的枚举,它是在全局命名空间中声明的有效的C++枚举:
enum {
MyConstant = 1
};下面是一个来自AppKit的例子:
enum {
NSLayoutRelationLessThanOrEqual = -1,
NSLayoutRelationEqual = 0,
NSLayoutRelationGreaterThanOrEqual = 1,
};
typedef NSInteger NSLayoutRelation;枚举值只是静态整数--您不能像对象那样对它们进行消息传递(在C++中也是如此),也不能询问它们的名称或作用域。您可以转换/转换为其他数字或指定其宽度(ObjC中的扩展名)。
由于枚举没有唯一值,因此冲突没有正确发生
如果不赋值,那么它们将被自动赋值,比前面的枚举值大1。
因此,如果你想要一个更灵活的对象,你可能需要考虑创建一个类或者使用一个集合。C枚举非常有用,而且非常基础。
请注意,您可以在Objective-C中以相同的翻译使用C++ --它被称为Objective-C++。
发布于 2013-05-22 15:04:58
它们是C枚举。它们不是对象。它们适用于轻量级命名选项参数和位域掩码选项,也适用于C切换条件。您会发现它们在Objective-C中以这种方式使用。不应该有冲突,因为它们只是const整数的typedefs。要在Xcode中有效地使用它们,请确保为枚举和成员添加有意义的前缀和名称。这为您提供了有用的代码完成功能。
也可以看看有用的宏NS_ENUM和NS_OPTION NSHipster博客有一个很好的发帖。
https://stackoverflow.com/questions/16685084
复制相似问题