如果我用新的NS_ENUM宏声明枚举类型,这是因为更强的类型检查而引入的,我是否也可以在运行时检查这种类型?
我的意思是,我有
typedef NS_ENUM(NSUInteger, MyNewType) {
MyNewTypeInstance1,
MyNewTypeInstance2,
MyNewTypeInstance3
};
。我想知道,例如(NSUInteger)i = 2
有点MyNewType
。
答案 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));