5

If I declare enum type with new NS_ENUM macro which was introduced because of stronger type check, am I able to check for this type also in runtime?

I mean, I have

typedef NS_ENUM(NSUInteger, MyNewType) {

    MyNewTypeInstance1,
    MyNewTypeInstance2,
    MyNewTypeInstance3

};

. And I want to know that for example (NSUInteger)i = 2 is kind of MyNewType.

4

2 回答 2

7

NS_ENUM,这只是一种使用通过 C++11 引入到 Objective-C 的功能的一种方式,称为“固定基础类型”用于枚举。这确保了用于存储枚举值的类型具有固定的大小和符号,但它不允许您在运行时查询枚举类型。

如果您有兴趣验证值是否实际上是枚举的成员,则有两种相关的方法。如果这些值是连续的,您可以编写一个宏来检查所讨论的值是否在有效的连续范围内。否则,您可以采用 Apple 采用的更通用(和详细)的方法,例如UIDeviceOrientationIsValidInterfaceOrientation,并明确检查所有有效的枚举值。

于 2012-11-20T16:02:02.823 回答
0

@warrenm:很好的答案

我在想这个:

添加一种“myLastValueJustToCheck”并检查您的int是否<该值怎么样?

typedef NS_ENUM(NSUInteger, MyNewType) {
    MyNewTypeInstance1,
    MyNewTypeInstance2,
    MyNewTypeInstance3,
    myLastValueJustToCheck
};

然后检查:

NSUInteger i = 2;
NSLog(@"is %i i in my range? %i", i, (i<myLastValueJustToCheck));

i = 3;
NSLog(@"is %i i in my range? %i", i, (i<myLastValueJustToCheck));

i = 4;
NSLog(@"is %i i in my range? %i", i, (i<myLastValueJustToCheck));
于 2012-11-20T16:34:09.460 回答