Objective-C使用位运算设计可复选的枚举
时间:2022-06-06
本文章向大家介绍Objective-C使用位运算设计可复选的枚举
,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
使用位运算设计可复选的枚举
一、枚举使用的一个小例子
在软件开发中,枚举是我们会经常会用到的一种编程方式,通过枚举,可以使我们的代码更具可读性与统一性。通常情况下,我们会通过typedef来定义一种枚举的类型来使用。例如:
typedef enum {
para1,
para2,
para3
}myEnum;
我们可以在函数的参数中来使用它:
-(void)testEunm:(myEnum)para{
switch (para) {
case para1:
{
NSLog(@"para%d",1);
}
break;
case para2:
{
NSLog(@"para%d",2);
}
break;
case para3:
{
NSLog(@"para%d",3);
}
break;
default:
break;
}
}
我们在调用调用这样的一个函数的时候,通过传入一个枚举类型,可以分流执行我们想要的操作。
二、枚举到底是个什么东西
枚举并不是一种奇怪的类型,起实质是整型的另一个名字,如果没有附加的操作,枚举中的第一个参数默认就是整型0,之后依次递加,当然,我们也可以认为的控制这个数值,例如:
typedef enum {
para1=7,
para2,
para3=1000
}myEnum;
可以这么理解,我在传参的时候,传7和para1是完全一样的效果,但是后者明显更具可读性。
三、可复选的枚举属性
如果熟悉iOS的开发,你会发现系统很多的枚举类型都是可以复选的,例如视图的拉伸模式,json的解析属性等等,这不仅使代码可读性优化,也更加简便了一些选项设置的代码。当我们理解了枚举就是整型之后,会发现其实很容易做到这一点:
首先,我们给定义的枚举参数设置一个有规律的值:
typedef enum {
para1=1<<1,
para2=1<<2,
para3=1<<3
}myEnum;
<<符号是位运算中的左移运算符,将1进行1位,2位,3位的左移后,我们得到的二进制数如下:
0001
0010
0100
现在我们有了一个大致思路了,用当前位的0和1来标识当前属性是否设置,如果有几个属性的复选,只需要将我们的相应枚举进行或的位运算,在取的时候检测相应位是否为1即可,这正是与运算可以做到的:
-(void)testEunm:(myEnum)para{
if (para&1<<1) {
NSLog(@"para1");
}
if (para&1<<2) {
NSLog(@"para2");
}
if (para&1<<3) {
NSLog(@"para3");
}
}
我们通过如下方式调用:
[self testEunm:para2|para3];
打印结果如下:
这种位运算的枚举在官方sdk中被广泛使用,能够有效的简化代码和提高代码的可读性。
专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 5分钟学会经典排序算法-归并排序
- Python | 爬取农业农村部政策法规并绘制词云图
- 5分钟学会经典排序算法-希尔排序
- Stata | 爬取企业景气指数与企业家信心指数
- Stata | 发出提示音的几种方式
- docker垃圾回收机制
- 让运维更简单的7种定时任务实现方式
- Notes | Chrome 浏览器常用快捷键
- Python | 从 PDF 中提取文本内容
- Stata | 自动生成中南财大2019拟录取硕士研究生分析报告
- Stata | 聊聊数据排序的几种方式
- 在生产中应用广泛的排序算法
- SQL | SQL 必知必会笔记 (一 )
- 如何在树莓派4B上安装EMQ X Broker
- SQL | SQL 必知必会笔记 (二)