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 ...
随机推荐
- 在vs code中进行本地调试和开启本地服务器
https://blog.csdn.net/tangxiujiang/article/details/80927699
- MapboxGL基础
1. 概述 Mapbox GL 是一套开源库,用于在 Web.移动和桌面应用程序中嵌入可自定义且响应迅速的客户端地图.Mapbox GL 贴图以高帧速率呈现.缩写"GL"来自行业标 ...
- Camera | 5.Linux v4l2架构(基于rk3568)
上一篇我们讲解了如何编写基于V4L2的应用程序编写,本文主要讲解内核中V4L2架构,以及一些最重要的结构体.注册函数. 厂家在实现自己的摄像头控制器驱动时,总体上都遵循这个架构来实现,但是不同厂家.不 ...
- pat乙级 1019 数字黑洞
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...
- 【研究生学习】SNR、Eb/N0和Es/N0的关系
SNR.Eb/N0与Es/N0的关系 在模拟通信中,SNR是一个非常有用的指标 实例说明
- SQLServer 查询所有外键关联表信息
有时候需要清除一些数据,但是总会有一些外键关联多加阻拦,下面是一些外键关联查询,方便更快捷有效的查询到需要处理的外键信息. 一.外键信息 查询列从左到右分别是: 外键约束名,子表名,外键列名,父表名 ...
- 零基础小白速成python?有了这本书你还在担心什么?
<Python编程快速上手>书籍PDF高清版免费下载地址 提取码:bc9h 内容简介 · · · · · · 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种 ...
- 手算推导BP神经网络
一.神经元 下图的蓝色区域被称为一个"感知机"(Perceptron), 感知机是对信息进行编码.压缩.集成.融合的计算机智能接口系统. 说白了,就是在输入端输入X1~X7这7个输 ...
- SVG 从入门到后悔,怎么不早点学起来(图解版)
点赞 + 关注 + 收藏 = 学会了 作为一只前端,只懂 Vue.React 感觉已经和大家拉不开距离了. 可视化.机器学习等领域 JS 都有涉及到,而可视化方面已经被很多领域用到,比如大屏项目. 可 ...
- ibatis批量数据入库sql
ibaits 批量数据入库sql <insert id="waiter.insertBatch" parameterClass="java.util.List&qu ...