NS_ENUM VS. NS_OPTIONS

UITableView中枚舉類型例子.png

NS_ENUM

從iOS6開始,蘋果開始使用NS_ENUM和 NS_OPTIONS宏替代原來的C風(fēng)格的enum進(jìn)行枚舉類型的定義。

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault,    
    UITableViewCellStyleValue1,     
    UITableViewCellStyleValue2,     
    UITableViewCellStyleSubtitle
    }; 

NS_OPTIONS

通過按位掩碼的方式也可以進(jìn)行枚舉類型的定義

typedef NS_OPTIONS(NSUInteger, UITableViewCellStateMask) {
    UITableViewCellStateDefaultMask                     = 0,
    UITableViewCellStateShowingEditControlMask          = 1 << 0,
    UITableViewCellStateShowingDeleteConfirmationMask   = 1 << 1
    };

兩者的區(qū)別

  • NS_ENUM枚舉項(xiàng)的值為NSInteger,NS_OPTIONS枚舉項(xiàng)的值為NSUInteger
  • NS_ENUM定義通用枚舉,NS_OPTIONS定義位移枚舉
    位移枚舉即是在你需要的地方可以同時(shí)存在多個(gè)枚舉值如這樣:
UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc] init];
swipeGR.direction = UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown;

而NS_ENUM定義的枚舉不能幾個(gè)枚舉項(xiàng)同時(shí)存在,只能選擇其中一項(xiàng),像這樣:

 NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.baseWritingDirection = NSWritingDirectionLeftToRight;

PS : 判斷一個(gè)枚舉類型的變量為某個(gè)值的時(shí)候,不用 == ,而是用按位與:
if (swipeGR.direction & UISwipeGestureRecognizerDirectionUp)

結(jié)論:只要枚舉值需要用到按位或(2個(gè)及以上枚舉值可多個(gè)存在)就使用NS_OPTIONS,否則使用NS_ENUM

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容