位移枚举
2016-12-12 本文已影响16人
哔哩哔哩智能喵
-
位移枚举和普通枚举的区别
-
位移枚举可以传递多个参数,普通的枚举只能传递单个参数
-
/**
* 普通枚举
*/
typedef NS_ENUM(NSInteger,XCType)
{
XCTypeTop,
XCTypeBottom
};
/**
* 位移枚举
一个参数可以传递多个值
如果是位移枚举,观察第一个枚举值,如果该枚举值!=0,那么可以默认传0,如果传0做参数,那么效率最高
*/
typedef NS_OPTIONS(NSInteger, XCTypec) {
XCTypecTop = 1<<0,//1*2的0次方 = 1
XCTypecBottom = 1<<1,//1*2的1次方 = 2
XCTypecLeft = 1<<2,//1*2的2次方 = 4
XCTypecRight = 1<<3//1*2的3次方 = 8
};
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self test: XCTypecTop | XCTypecLeft |XCTypecRight];
}
-(void)test:(XCTypec)typec
{
NSLog(@"%ld",(long)typec);
if (typec & XCTypecTop) {
NSLog(@"-%zd",typec & XCTypecTop);
}
if (typec & XCTypecLeft) {
NSLog(@"---%zd",typec & XCTypecLeft);
}
if (typec & XCTypecRight) {
NSLog(@"----%zd",typec & XCTypecRight);
}
}
- 举个🌰
在SDWebimage里有的地方就可以用位移枚举同时传递多个参数,在下面的代码中options:如果作为普通的枚举,只能实现一种图片处理,但是用了位移枚举,可以同时传递多个参数。需要注意的一点是,位移枚举不一定要传多个参数,根据业务需求来。
-
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.600_0.jpeg"] placeholderImage:[UIImage imageNamed:@"Snip20160221_306"] options:SDWebImageCacheMemoryOnly | SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
switch (cacheType) {
case SDImageCacheTypeNone:
NSLog(@"直接下载");
break;
case SDImageCacheTypeDisk:
NSLog(@"磁盘缓存");
break;
case SDImageCacheTypeMemory:
NSLog(@"内存缓存");
break;
default:
break;
}
}];