文档章节

[Objective-C] 枚举ENUM

Zifirery
 Zifirery
发布于 2017/02/27 13:59
字数 277
阅读 41
收藏 1

#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

© 著作权归作者所有

共有 人打赏支持
Zifirery
粉丝 0
博文 31
码字总数 17077
作品 0
南京
iOS工程师
私信 提问
Objective-C 枚举 中位运算 的使用

前言 Enum,也就是枚举,从C语言开始就有了,C++、Java、Objective-C、Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个—-规范的定义代码中的状态、选项等“...

法斗斗
07/10
0
0
在 Swift 中实现 NS_OPTIONS

从Xcode 4.5以后,我们在Objective-C中使用NSENUM和NSOPTIONS来定义一个枚举,以替代C语言枚举的定义方式。其中NSENUM用于定义普通的枚举,NSOPTIONS用于定义选项类型的枚举。 而到了Swift中...

hejunbinlan
2015/09/17
13
0
5分钟学会枚举的正确使用姿势-Enumeration宏

5分钟学会枚举的正确使用姿势-Enumeration宏 原文链接 前言 Enum,枚举,相信大部分编程语言都有对应的枚举类型,功能可能有多有少,但是枚举最核心的功能是 “规范的定义代码中的状态、状态...

法斗斗
2016/05/27
50
0
《Effective Objective-C 2.0》读书笔记(一)

1、了解Objective-C的起源 Objective-C与C++、Java等面向对象语言类似,不过很多方面有所差别。Objective-C使用了“消息结构”(messaging structure)而非“函数调用”(function calling)...

习惯有你syh
2017/12/07
0
0
Swift讲解专题九——枚举

Swift讲解专题九——枚举 一、引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以...

珲少
2016/05/15
113
0

没有更多内容

加载失败,请刷新页面

加载更多

我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

问题终结者
11分钟前
2
0
Java 使用 gson 对 json 根据 key 键进行排序

引入Google的gson jar <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version>......

yh32
13分钟前
1
0
Vue.use源码解析

什么是Vue插件 关于什么是Vue插件大家可以去看官网的解释 ,总得来说就是提供一个全局注册/调用的能力。 怎么用 我们以Weex为例。 首先有一个toast.js const Toast = {}Toast.install = (Vu...

peakedness丶
20分钟前
1
0
mybatis学习(2)

http://www.mybatis.org/spring/zh/factorybean.html 参考mybatis官网 Mybatis集成Spring: 使用Spring的IOC,将sqlSession(存在事物),交给Spring管理。 1.依赖jar包 <dependency> <g......

杨健-YJ
29分钟前
2
0
ES的性能优化

我们在很多场景下会用到ES帮助我们解决搜索问题,但是很多人了解只是停留在表面,如何深入的使用ES,并做针对性的性能优化呢? 批量提交 当大量的写任务时,可以采用批量提交的方案,但是需要...

春哥大魔王的博客
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部