OC中的两种枚举解释

来源:互联网 发布:淘宝卖家申请电子面单 编辑:程序博客网 时间:2024/04/30 21:47
下面来简单的解释一下OC里枚举的两种类型.NS_ENUM和NS_OPTIONS本质上是一样的都是枚举.我举个例子.typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {    UIViewAnimationTransitionNone,    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};应该可以看出一些苗头.NS_ENUM这种声明出来的东西大部分是单选. NS_OPTIONS声明出来的大部分是多选.像UIViewAnimationTransition这种在用的时候肯定是只能选一种效果,你要么从左翻到右,要么从右翻到左,你做动画的时候总不能同一时刻让他同时从左到右,又从右到左翻,对吧.而UIViewAutosizing就不一样了.我要是让子view的宽高和父View一样,那么autoviewsizing的选项肯定是类似于这种.UIViewAutoresizingFlexibleWidth  | UIViewAutoresizingFlexibleHeight没错吧,意思就是两个options的我都得选才行.那么如果有个场景让我判断当前的view的Autoresizing有哪几个.我怎么判断呢?很简单.用按位与操作就行了.假设 autoResizings = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin;我们判断autoResizings里是否有UIViewAutoresizingFlexibleLeftMargin的时候只需要if(autoResizings & UIViewAutoresizingFlexibleLeftMargin)是否为true就可以了.用二进制表示的话(这里不用care NSUInteger到底是几位的.就表示这么个意思)UIViewAutoresizingFlexibleLeftMargin = 00000001UIViewAutoresizingFlexibleWidth = 00000010UIViewAutoresizingFlexibleRightMargin = 00000100所以根据上面的表达式,我们的autoResizings = 00000111.那么执行按位与操作是这样的. 00000111&00000001   结果就是00000001,为true.表示含有这个选项.

0 0
原创粉丝点击