枚举值

1 - iOS 枚举成员在赋值时往往是如下模式:左移对齐

2 - 为何这般设计 ?其一提高了阅读性;其二便于计算,能够更好的表达枚举值的含义

 1 #import "ViewController.h"
2 // 左移赋值
3 typedef enum{
4 MYOptionOne = 1, // 0b0001 MYOptionOne = 1 << 0
5 MYOptionTwo = 2, // 0b0010 MYOptionTwo = 1 << 1
6 MYOptionThree = 4, // 0b0100 MYOptionThree = 1 << 2
7 MYOptionFour = 8, // 0b1000 MYOptionFour = 1 << 3
8 }MYOptions;
9
10 @implementation ViewController
11
12 - (void)viewDidLoad {
13 [super viewDidLoad];
14
15 // 位或运算
16 [self setOptionsA:MYOptionOne | MYOptionFour];
17 /*18 0001
19 1000
20 ----
21 1001
22 */
23
24 // 在枚举成员左移对齐赋值的情况下,位或等价于加运算(不建议使用 +)
25 [self setOptionsB:MYOptionOne + MYOptionThree];
26 }
27
28
29 // 把枚举结果 options 同枚举成员进行位与运算,就会得到该枚举成员的值
30 - (void)setOptionsA:(MYOptions)options{
31
32 if (options & MYOptionOne) {
33 /*34 1001
35 0001
36 ----
37 0001
38 */
39 NSLog(@"包含 MYOptionOne");
40 }
41
42 if(options & MYOptionTwo){
43 /*44 1001
45 0010
46 ----
47 0000
48 */
49 NSLog(@"包含 MYOptionTwo");
50 }
51
52 if(options & MYOptionThree){
53 /*54 1001
55 0100
56 ----
57 0000
58 */
59 NSLog(@"包含 MYOptionThree");
60 }
61
62 if(options & MYOptionFour){
63 /*64 1001
65 1000
66 ----
67 1000
68 */
69 NSLog(@"包含 MYOptionFour");
70 }
71 }
72
73 - (void)setOptionsB:(MYOptions)options{
74
75 if (options & MYOptionOne) {
76 NSLog(@"包含 MYOptionOne");
77 }
78
79 if(options & MYOptionTwo){
80 NSLog(@"包含 MYOptionTwo");
81 }
82
83 if(options & MYOptionThree){
84 NSLog(@"包含 MYOptionThree");
85 }
86
87 if(options & MYOptionFour){
88 NSLog(@"包含 MYOptionFour");
89 }
90 }
91
92 @end

OC基础 - iOS在枚举赋值时为何采用左移格式的更多相关文章

  1. ios开发之OC基础-ios开发学习路线图

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  2. OC基础--结构体 枚举做类成员属性

    结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation ...

  3. iOS -- 给model赋值时走了[self setValuesForKeysWithDictionary:dic]不走setvalue: forked:

    这是一个小坑, 看看你的BaseModel的便利构造器的方法: + (__kindof BaseModel *)modelWithDic:(NSDictionary *)dic { return [[ ...

  4. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

  5. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  6. OC基础7:变量和数据类型

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.有时候初始化需要让对象带有初始值,那么 ...

  7. OC基础--数据类型与表达式

    前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...

  8. OC基础--字符串

    前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...

  9. 【已解决】Https请求——基础连接已经关闭 发送时发生错误

    本人在做商用项目的推送消息功能时,借助第三方推送服务.这里避免有打广告的嫌疑,就不报名字了.由于是通过调用API接口,所以Post方法是自己写的,但是在开发环境是可以正常推送的,但是一上线就出各种问题 ...

  10. OC基础 内存管理

    OC基础  内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free ...

随机推荐

  1. 从零开始使用阿里云OSS服务(白嫖)

    阿里云对象存储服务OSS使用记录 1 新人免费开通OSS服务 访问 阿里云官网,登录账号(个人新用户账号),首页搜索 对象存储OSS,点击下方的直达. 点击立即开通,此时会在一个新网页中完成开通 完成 ...

  2. Word 表格对文字、图文进行排版

    在以前,Web 前端工程师利用 <table /> 元素对网页布局进行排版,但是如今却不推荐此元素排版了,而是改用 <div /> 元素和 CSS 弹性布局(或网格布局)对网页 ...

  3. 【磐河旅行】之酒店API接口对接实录

    1.项目需求概述: 通过对接第三方磐河旅行的酒店API接口实现在我们的APP .微信小程序.H5上可提供用户酒店查询.酒店预订.退订等功能.效果如下图: 2.酒店接口功能拆分 除了酒店静态数据字典(如 ...

  4. python中操控excel的几个库:xlwt,xlrd,xlutils

    一.xlrd和xlwt模块介绍 xlrd模块提供在任何平台上从excel电子表格(.xls和.xlsx)中提取数据的功能,xlwt模块提供生成与Microsoft Excel 95 到2003版本兼容 ...

  5. Spring Cloud Stream 消息驱动

    屏蔽底层消息中间件的差异,降低切换成本 , 统一消息的编程模型. 通过定义绑定器Binder 作为中间件. 实现应用程序与消息中间件的细节之间的隔离. 消息发送端: <dependencies& ...

  6. 10.MyBatis-Plus的使用

    整合MyBatis-Plus 导入依赖 在解决逆向工程生成的代码报错时候已经给bianen-common导入了依赖 导入数据库的驱动 导入驱动和MySql的版本有关,我安装的MySql版本是5.7.3 ...

  7. drf从入门到飞升仙界 08

    断点调试使用 # 程序在debug模式运行,可以在任意位置停下,查看当前情况下变量数据的变化情况 # 使用pycharm调试程序 - 1.以debug模式运行. - 2.在代码左侧加入断点(红圈) - ...

  8. C++基础复习题(笔试题)

    C++基础~for循环:选择,判断 HELLO,亲爱的小朋友! 我们准备 35个选择题,对for循环及之前的内容进行一个简单的复习,快来看一下吧! 顺序&选择结构 1.对于C++中变量的命名规 ...

  9. datax缺少clickhouse reader插件

    背景:想要把click house的数据源同步到clickhouse,发现Datax没有clickhousereader组件. 1.把clickhousewriter/libs下的所有jar包复制到r ...

  10. Docker之Elastic Search&Kibana保姆级别安装

    Docker之Elastic Search&Kibana保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) ...