新的现代Objective-C枚举类型检查

时间:2012-11-20 15:54:32

标签: iphone objective-c ios macos

如果我用新的NS_ENUM宏声明枚举类型,这是因为更强的类型检查而引入的,我是否也可以在运行时检查这种类型?

我的意思是,我有

typedef NS_ENUM(NSUInteger, MyNewType) {

    MyNewTypeInstance1,
    MyNewTypeInstance2,
    MyNewTypeInstance3

};

。我想知道,例如(NSUInteger)i = 2有点MyNewType

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

@warrenm:好ansewr

我正在考虑这个问题:

添加一种“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));