位移枚举

  • 位移枚举和普通枚举的区别

    • 位移枚举可以传递多个参数,普通的枚举只能传递单个参数

/**
 * 普通枚举
 */
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;
        }
    }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容