簡體   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