[Objective-C] 枚举ENUM

#Objective-C 枚举ENUM

##简单枚举 ###定义

typedef NS_ENUM(NSUInteger, Type) {
    //用户未持有券的状态
    TypeA = 0,
    TypeB = 1,
    TypeC = 2,
}

###使用

Type type = TypeA;

//if 语句
if (status9==CouponStatus_UserGet) {
	//your code
}

//switch 语句
switch (type) {
        case TypeA:
            //your code
            break;
        case TypeB:
            //your code
            break; 
        default:
            break;
}

##高级枚举

###定义

typedef NS_ENUM(NSUInteger, Type) {
    TypeA = 1 << 0,
    TypeB = 1 << 1,
    TypeC = 1 << 2,
    
    TypeD = TypeA|TypeB,
}
使用<<属于枚举的高级用法
a<<N: 右移符号,按二级制向右右移N位,多出来的位置,由0补充
3 << 2 = 0b11<<3 即0b1100

###使用

下面一种常见的用法

[[UNUserNotificationCenter currentNotificationCenter] 
requestAuthorizationWithOptions:(UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
                    NSLog(@"iOS10注册消息推送:%@",granted?@"成功":@"失败");
                }];

参数中出现了这样一个参数(UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert)

很显然是想同时实现3种情况。那么它的内部实现是怎么的?

- (void)options:(Type)type
{
	if(type&TypeA){
		//your code
	}
	if(type&TypeB){
		//your code
	}
	if(type&TypeC){
		//your code
	}
}

//原理解析
TypeA = 1 << 0 , 0b1<<0 = 0b1 = 1
TypeB = 1 << 1 , 0b1<<1 = 0b10 = 2
TypeC = 1 << 2 , 0b1<<2 = 0b100 = 4
TypeD = TypeA|TypeB = 1|2 = 0b1| 0b10= 0b11 = 3
//下面计算
TypeD&TypeA = 3 & 1 = 0b11 & 0b1 = 0b01 = 1
TypeD&TypeC = 3 & 4 = 0b11 & 0b100 = 0b000 = 0

转载于:https://my.oschina.net/u/1993252/blog/847028

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值