枚举值

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. DomDom

    DomDom 目录 DomDom 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 GetShell 2.1 尝试命令执行 2.2 nc反弹shell失败 2.3 PHP ...

  2. 基于Hexo的GitHub Pages个人博客搭建

    1.创建一个个人主页仓库 仓库命名最好为github账户名.github.io,这样可以通过https://github账户名.github.io访问 2.安装Hexo 此处采用局部安装: # npm ...

  3. sqlit 自增id为null

    CREATE TABLE proejct( id UNSIGNED INTEGER AUTO_INCREMENT, name VARCHAR(50) NOT NULL, type CHAR(10) N ...

  4. 魔兽世界2009年更换代理,九城CEO至全体员工公开信

    尊敬的全体第九城市员工, 最近一段时间以来,有关九城将要失去<魔兽世界>代理权的说法甚嚣尘上,各种传言四起.在目前来自<魔兽世界>的收入仍占九城收入绝大部分的情况下,对于外界的 ...

  5. 179. 最大数 (Medium)

    问题描述 179. 最大数 (Medium) 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意: 输出结果可能非常大,所以你需要返回一个字符串而不是整数 ...

  6. 尺取法 C - Vasya and String CodeForces - 676C

    C - Vasya and String CodeForces - 676C #include<iostream> using namespace std; int main() { lo ...

  7. uniapp 开发遇到的问题

    1. App平台IOS端软键盘上方横条去除方案(禁用键盘上的^) 在 pages.json 中配置 style配置 "app-plus": { "softinputNav ...

  8. 2022-05-31内部群每日三题-清辉PMP

    1.由于项目执行期间的范围变更,项目经理确定供应商必须对一个已在使用的产品模块进行更改.项目经理首先做什么? A.准备一份变更请求,以更新供应商的合同条款 B.检查采购管理计划和合同条款 C.将该信息 ...

  9. P9033题解

    P9033「KDOI-04」XOR Sum 题解 题目链接 传送门 题意简述 构造一个长度为 \(n\),值域为 \([0,m]\) 的异或和为 \(k\) 的序列,如果不存在则输出 \(-1\). ...

  10. 【Frida】启动手机上的Frida插件

    运行以下命令可以保证Frida一直在手机上运行,不关机,Frida就不关 adb shell su -c "./data/local/frida-server-15.2.2-android- ...