您的位置:首页 > 移动开发 > Objective-C

第03天实战技术(14):枚举中的位运算

2017-03-28 00:00 375 查看
#####一、枚举中的位运算

主要枚举中 有位运算 就可以使用并运算 |
为什么?
比如系统的UIControlEvents
我通过textField去监听开始编辑和发生改变的时候去处理事情 通过UIControlEvents 使用 | (并运算 : 两个有其中一个就会执行)

>>>>
[_tf addTarget:self action:@selector(textBegin) forControlEvents:UIControlEventEditingDidBegin|UIControlEventEditingChanged];

/**
typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
UIControlEventTouchDown                                         = 1 <<  0,      // on all touch downs
UIControlEventTouchDownRepeat                                   = 1 <<  1,      // on multiple touchdowns (tap count > 1)
UIControlEventTouchDragInside                                   = 1 <<  2,
UIControlEventTouchDragOutside                                  = 1 <<  3,
UIControlEventTouchDragEnter                                    = 1 <<  4,
UIControlEventTouchDragExit                                     = 1 <<  5,
UIControlEventTouchUpInside                                     = 1 <<  6,
UIControlEventTouchUpOutside                                    = 1 <<  7,
UIControlEventTouchCancel                                       = 1 <<  8,

UIControlEventValueChanged                                      = 1 << 12,     // sliders, etc.
UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13,     // semantic action: for buttons, etc.

UIControlEventEditingDidBegin                                   = 1 << 16,     // UITextField
UIControlEventEditingChanged                                    = 1 << 17,
UIControlEventEditingDidEnd                                     = 1 << 18,
UIControlEventEditingDidEndOnExit                               = 1 << 19,     // 'return key' ending editing

UIControlEventAllTouchEvents                                    = 0x00000FFF,  // for touch events
UIControlEventAllEditingEvents                                  = 0x000F0000,  // for UITextField
UIControlEventApplicationReserved                               = 0x0F000000,  // range available for application use
UIControlEventSystemReserved                                    = 0xF0000000,  // range reserved for internal framework use
UIControlEventAllEvents                                         = 0xFFFFFFFF
};

*/


位运算的一些理解

// 3210
// 2^0 = 1
// 二进制 0001 (1 * 2^0 + 0 * 2^ 1 + 0 * 2^ 2 + 0 * 2^ 3) = 1

int a = 1 << 0; // 左移动 0 位 相当于不移动   1    < 1 * 2^0 = 1 >
int b = 1 << 1; // 左移动 1位 二进制为 0010  2    < 1 * 2^1 = 2 >
int c = 1 << 2; // 左移动 2位 二进制为 0100  4    < 1 * 2^2 = 4 >
int d = 1 << 3; // 左移动 3位 二进制为 1000  8    < 1 * 2^3 = 8 >
// 左移动 n位 二进制为       < 1 * 2^n = ... >


解析系统的forControlEvents底层实现 (系统是实用&
(与运算:如果两个数都都为真(或为1),其结果为真,如果两位数中有一位为假(或为0)者结果为假)
)

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;

@end

@implementation ViewController

// 3210 // 2^0 = 1 // 二进制 0001 (1 * 2^0 + 0 * 2^ 1 + 0 * 2^ 2 + 0 * 2^ 3) = 1 int a = 1 << 0; // 左移动 0 位 相当于不移动 1 < 1 * 2^0 = 1 > int b = 1 << 1; // 左移动 1位 二进制为 0010 2 < 1 * 2^1 = 2 > int c = 1 << 2; // 左移动 2位 二进制为 0100 4 < 1 * 2^2 = 4 > int d = 1 << 3; // 左移动 3位 二进制为 1000 8 < 1 * 2^3 = 8 > // 左移动 n位 二进制为 < 1 * 2^n = ... >
- (void)viewDidLoad {
[super viewDidLoad];

// 主要枚举中 有位运算 就可以使用并运算 |
// 为什么?

[_tf addTarget:self action:@selector(textBegin) forControlEvents:UIControlEventEditingDidBegin|UIControlEventEditingChanged];

// forControlEvents 底层会去查看 有没有 UIControlEventEditingChanged

// NSLog(@"--- %d",d);

// 怎么去解析

[self test: c | b];
}

- (void)test:(int)value
{
// 解析value , 判断一下是否包含a,b,c,d

// & 与
// 使用 & 解析有没有包含 a,b,c,d
NSLog(@"--- %d %d %d %d",value & a ,value & b,value & c,value & d);

// --- 1 2 0 0
// --- 0 2 4 0

// value & b = 6 & 2 = 0110 & 0010 = 0010 = 2
// value & c = 6 & 4 = 0110 & 0110 = 0100 = 4
if (value & a) NSLog(@"包含了a");
if (value & b) NSLog(@"包含了b");
if (value & c) NSLog(@"包含了c");
if (value & d) NSLog(@"包含了d");

}

- (void)textBegin
{
NSLog(@"--- 开始编辑的时候就会调用");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息