シフト列挙解析
4065 ワード
シフト列挙変位列挙は非常に古いC言語技術 である. です です
練習する定義列挙タイプ メソッドターゲット は、動作タイプパラメータに従って、異なる応答 を行う.操作タイプは任意に組み合わせることができる .メソッドによる の実装メソッド呼び出し
コード・ノット使用 具体的な実行時に、 シフト設定により、非常に多くの組み合わせが得られます! は、シフト列挙タイプについて、 である.開発中、変位の列挙を見ながら、追加の操作をしないで、パラメータは直接0を入力することができます!
iOS固有の構文 iOS 5.0以降、新しい列挙定義方式 が提供される.列挙を定義するとともに、列挙中のデータのタイプ を指定する シフト列挙、使用可能 数値列挙、直接列挙設定値 を使用
/*******変位列挙演習******/
//同じ1と同じ位で他は0
//1位または1が1その他は0
//typedef enum{
//
// ActionUp = 1 << 0,
// ActionDown = 1 << 1,
// ActionLeft = 1 << 2,
// ActionRight = 1 << 3,
//
//
//
//}ActionEnum;
//typedef NS_OPTIONS(NSInteger, Action){
//
// ActionUp = 1 << 0,
// ActionDown = 1 << 1,
// ActionLeft = 1 << 2,
// ActionRight = 1 << 3,
//
//
//
//} ;
//
typedef NS_ENUM(NSInteger,ActionEnum){
ActionUp = 1 << 0,
ActionDown = 1 << 1,
ActionLeft = 1 << 2,
ActionRight = 1 << 3,
};
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//ビット単位または
[self didSelcted:ActionUp | ActionDown];
//0 0 0 1
//0 0 1 0
//0 0 1 1 -- 3
}
- (void) didSelcted:(ActionEnum)action{
//action 0 0 1 1
//up 0 0 0 1
// 0 0 0 1 ---> 1
if ((action & ActionUp) == ActionUp) {
NSLog(@"ActionUp %ld",action);
}
//action 0 0 1 1
//up 0 0 1 0
// 0 0 1 0 ---> 2
if ((action & ActionDown) == ActionDown) {
NSLog(@"ActionDown%ld",action);
}
//action 0 0 1 1
//up 0 1 0 0
// 0 0 0 1 ---> 0
if ((action &ActionLeft ) == ActionLeft) {
NSLog(@"ActionLeft %ld",action);
}
//action 0 0 1 1
//up 1 0 0 0
// 0 0 0 0 ---> 0
if ((action & ActionRight) == ActionRight) {
NSLog(@"ActionRight %ld",action);
}
}
いずれも1の結果であれば1
いずれも0であれば0 練習する
/// typedef enum {
ActionTypeTop = 1 << 0,
ActionTypeBottom = 1 << 1,
ActionTypeLeft = 1 << 2,
ActionTypeRight = 1 << 3} ActionType;
- (void)action:(ActionType)type {
if (type == 0) {
NSLog(@" ");
return;
}
if (type & ActionTypeTop) {
NSLog(@"Top %tu", type & ActionTypeTop);
} if (type & ActionTypeBottom) {
NSLog(@"Bottom %tu", type & ActionTypeBottom);
} if (type & ActionTypeLeft) {
NSLog(@"Left %tu", type & ActionTypeLeft);
} if (type & ActionTypeRight) {
NSLog(@"Right %tu", type & ActionTypeRight);
}
}
ActionType type = ActionTypeTop | ActionTypeRight;
[self action:type];
コード・ノット
1つのパラメータに複数のパラメータを同時に設定できます
具体的に判断できる
0
であれば、付加的な操作が何もしないことを示す、通常、実行効率が最も高いiOS固有の構文
typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions)
設定値typedef NS_ENUM(NSInteger, UITableViewStyle)
typedef NS_OPTIONS(NSUInteger, ActionType) {
ActionTypeTop = 1 << 0,
ActionTypeBottom = 1 << 1,
ActionTypeLeft = 1 << 2,
ActionTypeRight = 1 << 3
};
/*******変位列挙演習******/
//同じ1と同じ位で他は0
//1位または1が1その他は0
//typedef enum{
//
// ActionUp = 1 << 0,
// ActionDown = 1 << 1,
// ActionLeft = 1 << 2,
// ActionRight = 1 << 3,
//
//
//
//}ActionEnum;
//typedef NS_OPTIONS(NSInteger, Action){
//
// ActionUp = 1 << 0,
// ActionDown = 1 << 1,
// ActionLeft = 1 << 2,
// ActionRight = 1 << 3,
//
//
//
//} ;
//
typedef NS_ENUM(NSInteger,ActionEnum){
ActionUp = 1 << 0,
ActionDown = 1 << 1,
ActionLeft = 1 << 2,
ActionRight = 1 << 3,
};
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//ビット単位または
[self didSelcted:ActionUp | ActionDown];
//0 0 0 1
//0 0 1 0
//0 0 1 1 -- 3
}
- (void) didSelcted:(ActionEnum)action{
//action 0 0 1 1
//up 0 0 0 1
// 0 0 0 1 ---> 1
if ((action & ActionUp) == ActionUp) {
NSLog(@"ActionUp %ld",action);
}
//action 0 0 1 1
//up 0 0 1 0
// 0 0 1 0 ---> 2
if ((action & ActionDown) == ActionDown) {
NSLog(@"ActionDown%ld",action);
}
//action 0 0 1 1
//up 0 1 0 0
// 0 0 0 1 ---> 0
if ((action &ActionLeft ) == ActionLeft) {
NSLog(@"ActionLeft %ld",action);
}
//action 0 0 1 1
//up 1 0 0 0
// 0 0 0 0 ---> 0
if ((action & ActionRight) == ActionRight) {
NSLog(@"ActionRight %ld",action);
}
}