繁体   English   中英

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

[英]New modern Objective-C enum type check

如果我使用由于更强类型检查而引入的新NS_ENUM宏声明枚举类型,我是否也能在运行时检查此类型?

我的意思是,我有

typedef NS_ENUM(NSUInteger, MyNewType) {

    MyNewTypeInstance1,
    MyNewTypeInstance2,
    MyNewTypeInstance3

};

我想知道例如(NSUInteger)i = 2MyNewType一种。

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

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

@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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM