NS_OPTIONS

作者: wpf_register | 来源:发表于2017-10-13 15:27 被阅读5次

    参考文档

    在iOS开发中枚举大家用得最多的应该是NS_ENUM。
    NS_ENUM也没什么好讲的。主要来讲讲位枚举NS_OPTIONS。

    NS_ENUM和NS_OPTIONS本质是一样的。
    NS_ENUM是通用情况,NS_OPTIONS一般用来定义具有位移操作或特点的情况。

    二进制位操作

    位操作 解释
    &与 有0则0
    l 或 有1则1

    NS_OPTIONS位枚举的特点是可以使用位运算来处理枚举值,实际使用中可以用一个变量存储多个枚举值,表示互不影响的多个设置。

    比如系统中的UIViewAutoresizing定义如下。

    enum UIViewAutoresizing {
        UIViewAutoresizingNone                 = 0, // 000000
        UIViewAutoresizingFlexibleLeftMargin   = 1 << 0, // 000001
        UIViewAutoresizingFlexibleWidth        = 1 << 1,// 000010
        UIViewAutoresizingFlexibleRightMargin  = 1 << 2,// 000100
        UIViewAutoresizingFlexibleTopMargin    = 1 << 3,// 001000
        UIViewAutoresizingFlexibleHeight       = 1 << 4,// 010000
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5,// 100000
    }
    

    一般如下写法,实现了变量保存多个枚举值

     UIViewAutoresizing resizing = 
     UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    
    UIViewAutoresizing resizing = 000010 |010000 = 010010
    

    可以用 & 判断是否包含

    第一种情况

    if (resizing & UIViewAutoresizingFlexibleWidth) {
           // UIViewAutoresizingFlexibleWidth is set
    }
    
    等价于
    
    if (010010 & 000010) {
           // UIViewAutoresizingFlexibleWidth is set
    }
    

    010010 & 000010 = 000010 很明显不等于0,所以为YES。

    第二种情况

    if (resizing & UIViewAutoresizingFlexibleTopMargin) {
           // UIViewAutoresizingFlexibleTopMargin is set
    }
    
    等价于
    
    if (010010 & 001000) {
           // UIViewAutoresizingFlexibleTopMargin is set
    }
    

    010010 & 001000 = 0很明显等于0,所以为NO

    相关文章

      网友评论

        本文标题:NS_OPTIONS

        本文链接:https://www.haomeiwen.com/subject/famzyxtx.html