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

use*_*500 5 iphone macos objective-c ios

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

我的意思是,我有

typedef NS_ENUM(NSUInteger, MyNewType) {

    MyNewTypeInstance1,
    MyNewTypeInstance2,
    MyNewTypeInstance3

};
Run Code Online (Sandbox Code Playgroud)

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

war*_*enm 7

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

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