美文网首页
枚举值的添加

枚举值的添加

作者: 乐在琦中Helena | 来源:发表于2018-06-28 11:41 被阅读9次

    之前遇到过这样一个问题,在一个先前设计好的枚举类型中添加或删除一个枚举值(删除是不可能的,这辈子都不可能的,最多只能是弃用),或组合一些枚举值,要如何做才能看起来不那么尬。

    感到尬的原因可能只是当时设计的时候考虑的不够全面,也或许是这个枚举类型已经无法满足你的需求了,这时候就要换个思路,可以像苹果这样:

    这是iOS6之前使用的:

    typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
        UIInterfaceOrientationUnknown            = UIDeviceOrientationUnknown,
        UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
        UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
        UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
        UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
    } __TVOS_PROHIBITED;
    

    这是在iOS6之后添加的:

    typedef NS_OPTIONS(NSUInteger, UIInterfaceOrientationMask) {
        UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait),
        UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft),
        UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight),
        UIInterfaceOrientationMaskPortraitUpsideDown = (1 << UIInterfaceOrientationPortraitUpsideDown),
        UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
        UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown),
        UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
    } __TVOS_PROHIBITED;
    

    先是对先前存在的枚举值进行了一个等价的平移,之后对每个值都进行了按位左移,这个的目的在于为新增的枚举值添加便利,可以通过按位或来实现。

    真是一举两得。

    相关文章

      网友评论

          本文标题:枚举值的添加

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