美文网首页
混合枚举

混合枚举

作者: 公爵海恩庭斯 | 来源:发表于2018-01-31 10:25 被阅读26次

参考 YYModel,混合枚举的设计,与 MFC 编程中高八位低八位的思想异曲同工。

YYEncodingType 的第八位是一个普通的枚举,中八位是一套 Options,高八位是另一套 Options。

尽管笔者不赞同这样的设计(易用性差,可维护性低,内封装扩展性差),但这段代码着实令人印象深刻。

typedef NS_OPTIONS(NSUInteger, YYEncodingType) {
    YYEncodingTypeMask       = 0xFF, ///< mask of type value
    YYEncodingTypeUnknown    = 0, ///< unknown
    YYEncodingTypeVoid       = 1, ///< void
    YYEncodingTypeBool       = 2, ///< bool
    YYEncodingTypeInt8       = 3, ///< char / BOOL
    YYEncodingTypeUInt8      = 4, ///< unsigned char
    YYEncodingTypeInt16      = 5, ///< short
    YYEncodingTypeUInt16     = 6, ///< unsigned short
    YYEncodingTypeInt32      = 7, ///< int
    YYEncodingTypeUInt32     = 8, ///< unsigned int
    YYEncodingTypeInt64      = 9, ///< long long
    YYEncodingTypeUInt64     = 10, ///< unsigned long long
    YYEncodingTypeFloat      = 11, ///< float
    YYEncodingTypeDouble     = 12, ///< double
    YYEncodingTypeLongDouble = 13, ///< long double
    YYEncodingTypeObject     = 14, ///< id
    YYEncodingTypeClass      = 15, ///< Class
    YYEncodingTypeSEL        = 16, ///< SEL
    YYEncodingTypeBlock      = 17, ///< block
    YYEncodingTypePointer    = 18, ///< void*
    YYEncodingTypeStruct     = 19, ///< struct
    YYEncodingTypeUnion      = 20, ///< union
    YYEncodingTypeCString    = 21, ///< char*
    YYEncodingTypeCArray     = 22, ///< char[10] (for example)
    
    YYEncodingTypeQualifierMask   = 0xFF00,   ///< mask of qualifier
    YYEncodingTypeQualifierConst  = 1 << 8,  ///< const
    YYEncodingTypeQualifierIn     = 1 << 9,  ///< in
    YYEncodingTypeQualifierInout  = 1 << 10, ///< inout
    YYEncodingTypeQualifierOut    = 1 << 11, ///< out
    YYEncodingTypeQualifierBycopy = 1 << 12, ///< bycopy
    YYEncodingTypeQualifierByref  = 1 << 13, ///< byref
    YYEncodingTypeQualifierOneway = 1 << 14, ///< oneway
    
    YYEncodingTypePropertyMask         = 0xFF0000, ///< mask of property
    YYEncodingTypePropertyReadonly     = 1 << 16, ///< readonly
    YYEncodingTypePropertyCopy         = 1 << 17, ///< copy
    YYEncodingTypePropertyRetain       = 1 << 18, ///< retain
    YYEncodingTypePropertyNonatomic    = 1 << 19, ///< nonatomic
    YYEncodingTypePropertyWeak         = 1 << 20, ///< weak
    YYEncodingTypePropertyCustomGetter = 1 << 21, ///< getter=
    YYEncodingTypePropertyCustomSetter = 1 << 22, ///< setter=
    YYEncodingTypePropertyDynamic      = 1 << 23, ///< @dynamic
};

相关文章

  • 混合枚举

    参考 YYModel,混合枚举的设计,与 MFC 编程中高八位低八位的思想异曲同工。 YYEncodingType...

  • 学习typescript - enum

    数字枚举 默认顺序 数字枚举 指定顺序 数字枚举 获取对应数字 枚举 首个成员未初始化 字符串枚举 字符串数字混合...

  • CGBlendMode研究

    BlendMode颜色混合模式枚举值 https://blog.csdn.net/qq_14920635/arti...

  • iOS NSLineBreakMode 解释

    NSLineBreakMode 枚举意义: 常见问题场景: Label中文与数字混合导致换行// 解决方案labe...

  • PorterDuff.Mode

    Alpha合成模式 混合模式 枚举值 ADDPorterDuff.Mode ADD将源像素添加到目标像素并使结果饱...

  • OC 页面给Swift页面正向传值之- 传入一个OC的枚举类型

    OC、Swift混合开发,现在新建了一个swift的VC,由OC界面跳转到swift界面,并且传入一个枚举类型。 ...

  • C#枚举及与枚举常数的转换

    1、枚举的定义 2、枚举绑定到comboBox 3、枚举常数转换为枚举string转枚举 数字值转枚举

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • 枚举类

    1.枚举类型的定义: 枚举类型定义的一般形式为 enum 枚举名{//枚举值表枚举值1;枚举值2;...} 在枚举...

  • 10、枚举与闭包

    枚举 枚举和普通类相比有什么优势 枚举类型、枚举名称与枚举值 枚举的比较运算 两个枚举之间可以使用等值比较(==)...

网友评论

      本文标题:混合枚举

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