[英]New modern Objective-C enum type check
如果我使用由於更強類型檢查而引入的新NS_ENUM宏聲明枚舉類型,我是否也能在運行時檢查此類型?
我的意思是,我有
typedef NS_ENUM(NSUInteger, MyNewType) {
MyNewTypeInstance1,
MyNewTypeInstance2,
MyNewTypeInstance3
};
。 我想知道例如(NSUInteger)i = 2
是MyNewType
一種。
不, 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.