iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
来源:互联网 发布:ebay怎么优化listing 编辑:程序博客网 时间:2024/06/06 09:42
一般情况下,我们采用C风格的enum关键字可以定义枚举类型。
enum{ UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFromLeft, UIViewAnimationTransitionFlipFromRight, UIViewAnimationTransitionCurlUp, UIViewAnimationTransitionCurlDown, } UIViewAnimationTransition; //位移操作枚举定义 enum { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 }; typedef NSUInteger UIViewAutoresizing;//使用NSUInteger的地方可以使用UIViewAutoresizing,//UIViewAutoresizing相当于NSUInteger的一个别名使用。 //因此一个UIViewAutoresizing的变量可以直接赋值给NSUInteger
枚举值一般是4个字节的int值,在64位系统上是8个字节。
在iOS6和Mac OS 10.8以后Apple引入了两个宏来重新定义这两个枚举类型,实际上是将enum定义和typedef合二为一,并且采用不同的宏来从代码角度来区分。
NS_OPTIONS一般用来定义位移相关操作的枚举值,我们可以参考UIKit.Framework的头文件,可以看到大量的枚举定义。
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { UIViewAnimationTransitionNone,//默认从0开始 UIViewAnimationTransitionFlipFromLeft, UIViewAnimationTransitionFlipFromRight, UIViewAnimationTransitionCurlUp, UIViewAnimationTransitionCurlDown, }; typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 };
这两个宏的定义在Foundation.framework的NSObjCRuntime.h中:
#if (__cplusplus && __cplusplus >= 201103L && (__has_extension(cxx_strong_enums) || __has_feature(objc_fixed_enum))) || (!__cplusplus && __has_feature(objc_fixed_enum)) #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type #if (__cplusplus) #define NS_OPTIONS(_type, _name) _type _name; enum : _type #else #define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type #endif #else #define NS_ENUM(_type, _name) _type _name; enum #define NS_OPTIONS(_type, _name) _type _name; enum #endif
将
typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
展开得到
typedef enum UIViewAnimationTransition : NSInteger UIViewAnimationTransition; enum UIViewAnimationTransition : NSInteger {
实例
枚举的定义还支持位运算的方式定义,如下: 等于号后面必须等于1typedef NS_ENUM(NSInteger, Test) { TestA = 1, //1 1 1 TestB = 1 << 1, //2 2 10 转换成 10进制 2 TestC = 1 << 2, //4 3 100 转换成 10进制 4 TestD = 1 << 3, //8 4 1000 转换成 10进制 8 TestE = 1 << 4 //16 5 10000 转换成 10进制 16};
0 0
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- 5.Object-c/IOS 枚举类型:enum,NS_ENUM,NS_OPTIONS
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS 枚举类型 enum NS_ENUM NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- C语言,自己当年编写的苹果(黑白)棋源程序代码
- [算法]用位运算的方法实现无符号整数的除法原理及程序
- 两款用C语言编写的学生信息成绩管理系统
- nginx php error log 配置 查找500 错误
- [算法]数据结构中关于货郎担路径问题的常用解法,边界路径问题
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- RunTime.exec()如何以root权限执行多条指令?
- [SQL]两条学校索迪杯软件大赛预赛试卷SQL语句考试试题
- git修改user.name和user.email
- HDU 4300 Clairewd’s message(kmp)
- [算法]两种字符串匹配算法(索引法,KMP算法)对比,C语言实现
- 分享几条来自微软(Microsoft)的算法设计笔试试题
- [算法]字符串匹配算法之BM算法,C语言实现
- java笔记之异常