开发过程中发现很多系统库枚举都是用位运算(<<)的形式进行定义的,如:UIControlEvents,UIControlState等。
下面结合我做的一个枚举说说这样做的好处。
代码如下:
//请求类型
typedef enum {
NeedTime = 1,
NeedPubk = 1<<1,
NeedSign = 1<<2,
NeedSessionId = 1<<3,
NeedImei = 1<<4,
NeedTokenSign = 1<<5,
AfterLogin = NeedTime|NeedSign|NeedTokenSign|NeedSessionId,//常见的登陆后接口需要参数
BeferLogin = NeedTime|NeedSign|NeedImei//常见的登陆前接口需要参数
}RequestType;//接口需要参数类型可多选,如:NeedImei|NeedPubk
使用:
+(void)requestWithPath:(NSString *)path
requestType:(RequestType)requestType
WithParams:(NSDictionary*)params
WithSuccessBlock:(requestFinshedBlock)finshed{
NSMutableDictionary *p = [NSMutableDictionary dictionary];
if (requestType & NeedImei) {
[p setObject:dataManger.imei forKey:@"imei"];
}
if (requestType & NeedTime) {
[p setObject:[NSDate NowTimestamp] forKey:@"timestamp"];
}
if (requestType & NeedPubk) {
NSString *cPublicKey =@"";
[p setObject:cPublicKey forKey:@"cPubKey"];
}
if (requestType & NeedSessionId) {
[p setObject:dataManger.sessionId forKey:@"sessionId"];
}
if (requestType & NeedSign) {
if (requestType & NeedTokenSign) {
[p setObject:dataManger.token forKey:@"token"];
}
[p setObject:@"signData" forKey:@"data"];
[p setObject: forKey:@"sign"];
if (requestType & NeedTokenSign) {
[p removeObjectForKey:@"token"];
}
}
[manger POST:path parameters:p progress:nil success:^(NSURLSessionTask *task, id responseObject) {
} failure:^(NSURLSessionTask *operation, NSError *error) {
finshed(NO,nil);
AppLog(@"%@",error);
}];
}
网络请求的使用
[LPXNetWork requestWithPath:DoLogin requestType:BeferLogin WithParams:data WithSuccessBlock:^(BOOL success, id _Nullable responseObject) {
if(success){
}
}];
可以看出这里使用的是 BeferLogin
BeferLogin = NeedTime|NeedSign|NeedImei//常见的登陆前接口需要参数
BeferLogin代表了需要时间戳、签名、和设备id。
用“|“运算的形式将NeedTime(00000001)、NeedSign(00000100)、NeedImei(00010000)合并为BeferLogin(00010101)。
这时(requestType & NeedImei)也就是 (BeferLogin &NeedImei)于是 00010101 & 00010000 = 00010000 = 16 = YES。
同理:requestType & NeedTime = YES、requestType & NeedSign = YES
请求的时候BeferLogin的请求类型就会拼接上时间戳、签名、和设备id。
好处是当遇到不常见请求类型是比如只要时间戳和设备id可以直接写NeedTime|NeedImei。这样可以根据需要灵活地进行配置。
网友评论