【iOS开发】NS_OPTIONS 的使用

74 阅读3分钟

示例

typedef NS_OPTIONS(NSUInteger, UIViewAnimationOptions) {
    UIViewAnimationOptionLayoutSubviews                      = 1 <<  0, // 0000 0000 0000 0000 0000 0000 0001
    UIViewAnimationOptionAllowUserInteraction                = 1 <<  1, // 0000 0000 0000 0000 0000 0000 0010
    UIViewAnimationOptionBeginFromCurrentState               = 1 <<  2, // 0000 0000 0000 0000 0000 0000 0100
    UIViewAnimationOptionRepeat                              = 1 <<  3, // 0000 0000 0000 0000 0000 0000 1000
    UIViewAnimationOptionAutoreverse                         = 1 <<  4, // 0000 0000 0000 0000 0000 0001 0000
    UIViewAnimationOptionOverrideInheritedDuration           = 1 <<  5, // 0000 0000 0000 0000 0000 0010 0000
    UIViewAnimationOptionOverrideInheritedCurve              = 1 <<  6, // 0000 0000 0000 0000 0000 0100 0000
    UIViewAnimationOptionAllowAnimatedContent                = 1 <<  7, // 0000 0000 0000 0000 0000 1000 0000
    UIViewAnimationOptionShowHideTransitionViews             = 1 <<  8, // 0000 0000 0000 0000 0001 0000 0000
    UIViewAnimationOptionOverrideInheritedOptions            = 1 <<  9, // 0000 0000 0000 0000 0010 0000 0000
    
    UIViewAnimationOptionCurveEaseInOut                      = 0 << 16, // 0000 0000 0000 0000 0000 0000 0000
    UIViewAnimationOptionCurveEaseIn                         = 1 << 16, // 0000 0000 0001 0000 0000 0000 0000
    UIViewAnimationOptionCurveEaseOut                        = 2 << 16, // 0000 0000 0010 0000 0000 0000 0000
    UIViewAnimationOptionCurveLinear                         = 3 << 16, // 0000 0000 0011 0000 0000 0000 0000
    
    UIViewAnimationOptionTransitionNone                      = 0 << 20, // 0000 0000 0000 0000 0000 0000 0000
    UIViewAnimationOptionTransitionFlipFromLeft              = 1 << 20, // 0000 0001 0000 0000 0000 0000 0000
    UIViewAnimationOptionTransitionFlipFromRight             = 2 << 20, // 0000 0010 0000 0000 0000 0000 0000
    UIViewAnimationOptionTransitionCurlUp                    = 3 << 20, // 0000 0011 0000 0000 0000 0000 0000
    UIViewAnimationOptionTransitionCurlDown                  = 4 << 20, // 0000 0100 0000 0000 0000 0000 0000
    UIViewAnimationOptionTransitionCrossDissolve             = 5 << 20, // 0000 0101 0000 0000 0000 0000 0000
    UIViewAnimationOptionTransitionFlipFromTop               = 6 << 20, // 0000 0110 0000 0000 0000 0000 0000
    UIViewAnimationOptionTransitionFlipFromBottom            = 7 << 20, // 0000 0111 0000 0000 0000 0000 0000
    
    UIViewAnimationOptionPreferredFramesPerSecondDefault     = 0 << 24, // 0000 0000 0000 0000 0000 0000 0000
    UIViewAnimationOptionPreferredFramesPerSecond60          = 3 << 24, // 0011 0000 0000 0000 0000 0000 0000
    UIViewAnimationOptionPreferredFramesPerSecond30          = 7 << 24, // 0111 0000 0000 0000 0000 0000 0000
    
} NS_ENUM_AVAILABLE_IOS(4_0);

使用

// NS_OPTIONS,定义选项
typedef NS_OPTIONS(NSUInteger, MyOption) {
    MyOptionNone = 0,       // 二进制0000, 十进制0
    MyOption1    = 1 << 0,  // 0001, 1
    MyOption2    = 1 << 1,  // 0010, 2
    MyOption3    = 1 << 2,  // 0100, 4
    MyOption4    = 1 << 3,  // 1000, 8
};

// 声明定义枚举变量
MyOption option = MyOption1 | MyOption2; // 0001 | 0010 = 0011,3

// 检查是否包含某选型
if ( option & MyOption3 ){ // 0011 & 0100 = 0000
     // 包含MyOption3
} else {
     // 不包含MyOption3
}

// 增加选项:
option |= MyOption4; // 0011 | 1000 = 1011, 11

// 减少选项
option &= ~MyOption4; // 1011 & (~1000) = 1011 & ~0111 = 0011, 3