OC基础 - iOS在枚举赋值时为何采用左移格式
枚举值
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在枚举赋值时为何采用左移格式的更多相关文章
- ios开发之OC基础-ios开发学习路线图
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- OC基础--结构体 枚举做类成员属性
结构体 枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期 毕业日期 -- 结构体 代码示例: 声明文件 Student.h: #import <Foundation ...
- iOS -- 给model赋值时走了[self setValuesForKeysWithDictionary:dic]不走setvalue: forked:
这是一个小坑, 看看你的BaseModel的便利构造器的方法: + (__kindof BaseModel *)modelWithDic:(NSDictionary *)dic { return [[ ...
- iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误
在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- OC基础7:变量和数据类型
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.有时候初始化需要让对象带有初始值,那么 ...
- OC基础--数据类型与表达式
前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...
- OC基础--字符串
前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...
- 【已解决】Https请求——基础连接已经关闭 发送时发生错误
本人在做商用项目的推送消息功能时,借助第三方推送服务.这里避免有打广告的嫌疑,就不报名字了.由于是通过调用API接口,所以Post方法是自己写的,但是在开发环境是可以正常推送的,但是一上线就出各种问题 ...
- OC基础 内存管理
OC基础 内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free ...
随机推荐
- Cesium渲染模块之概述
1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...
- python中的字符串的常用方法介绍
a = "alxe Li 金角大王" #创建一个字符串来演示方法的功能结果.一下都使用这个字符串演示. 首先要了解的常识性的知识点是:字符串是不可变的序列.所有对字符串的内 ...
- LeetCode-1606 找到处理请求最多的服务器
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-servers-that-handled-most-number-of-requests ...
- 从源码MessageSource的三个实现出发实战spring·i18n国际化
1.前言 互联网业务出海,将已有的业务Copy to Global,并且开始对各个国家精细化,本土化的运营.对于开发人员来说,国际化很重要,在实际项目中所要承担的职责是按照客户指定的语言让服务端返回相 ...
- lg8935 [JRKSJ R7] 茎 题解
由于标签内包含背包和树形dp,所以考虑用背包dp和树形dp求解. 考虑每次合并2个连通块(一个包含根节点),设\(f_{i,j}\)表示\(i\)子树内,操作\(j\)次的方案数(未合并连通块),设\ ...
- TiDB日常运维手册
1.处理dm不兼容DDL 迁移中断,执行跳过操作 tiup dm list tiup dm display xxx-dm-prod tiup dmctl --master-addr 10.0.xx.x ...
- python数据方面的文章
excel 对接 jupyter https://mp.weixin.qq.com/s/NTCIOs_Yz3MIRgT8S36yGQ pandas 常用分拆数据 https: ...
- ES-DSL
GET index_name/_search{ "track_total_hits":true} 可以查询总记录数,不加只能展示最多10000条
- MeterSphere中dubbo接口测试分享
一.域名解释 1.1.接口文档:UserAccountAssetServiceI.getUserAccountVirtualAsset UserAccountAssetServiceI(接口名,需要用 ...
- IDEA Download missing driver files 下载失败解决方法
使用IDEA连接数据库时可能会遇到缺失驱动文件的问题(提示Download missing driver files) 正常情况下点击Download后IDEA会自动下载缺失的文件,但是因为网络原因, ...