iOS开发项目篇—37封装其他业务
iOS开发项目篇—37封装其他业务
一、简单说明
项目分层的步骤:
(1)新建一个模型类封装请求参数
(2)新建一个模型类封装请求结果(返回结果)
(3)新建一个业务类封装专一的业务
二、获得用户信息业务的封装
(1)新建一个模型类封装请求参数
查看新浪官方获取用户信息需要哪些请求参数:
封装请求参数的类的代码设计:
YYUserInfoParam.h文件
1 // 2 // YYUserInfoParam.h 3 // 4 5 #import <Foundation/Foundation.h> 6 7 @interface YYUserInfoParam : NSObject 8 /**access_token false string 采用OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获得。*/ 9 @property(nonatomic,copy)NSString *access_token; 10 11 /**uid false int64 需要查询的用户ID。*/ 12 @property(nonatomic,copy)NSString *uid; 13 @end
YYUserInfoParam.m文件没有做任何的处理
(2)新建一个模型类封装请求结果(返回结果)
封装请求结果的类的代码设计:
YYUserInfoResult.h文件
1 // 2 // YYUserInfoResult.h 3 // 4 5 #import "YYUserModel.h" 6 7 @interface YYUserInfoResult : YYUserModel 8 9 @end
注意:因为新浪接口返回的时用户信息,所以这里直接让这个类继承自YYUserModel
(3)新建一个业务类封装专一的业务
业务类的代码设计:
YYUserTool.h文件
1 // 2 // YYUserTool.h 3 // 4 5 #import <Foundation/Foundation.h> 6 #import "YYUserInfoParam.h" 7 #import "YYUserInfoResult.h" 8 9 @interface YYUserTool : NSObject 10 /** 11 * 加载用户的个人信息 12 * 13 * @param param 请求参数 14 * @param success 请求成功后的回调(请将请求成功后想做的事情写到这个block中) 15 * @param failure 请求失败后的回调(请将请求失败后想做的事情写到这个block中) 16 */ 17 +(void)userInfoWithParam:(YYUserInfoParam *)param success:(void (^)(YYUserInfoResult *result))success failure:(void (^)(NSError *error))failure; 18 @end
YYUserTool.m文件
1 // 2 // YYUserTool.m 3 // 4 5 #import "YYUserTool.h" 6 #import "YYHttpTool.h" 7 #import "MJExtension.h" 8 9 @implementation YYUserTool 10 +(void)userInfoWithParam:(YYUserInfoParam *)param success:(void (^)(YYUserInfoResult *result))success failure:(void (^)(NSError *error))failure 11 { 12 //把请求参数模型转换为字典 13 NSDictionary *params=param.keyValues; 14 15 [YYHttpTool get:@"https://api.weibo.com/2/users/show.json" params:params success:^(id responseObj) { 16 if (success) { 17 YYUserInfoResult *result=[YYUserInfoResult objectWithKeyValues:responseObj]; 18 success(result); 19 } 20 } failure:^(NSError *error) { 21 if (failure) { 22 failure(error); 23 } 24 }]; 25 } 26 @end
(4)在控制器中的使用
1 /** 2 *设置用户的昵称为标题 3 */ 4 -(void)setupUserInfo 5 { 6 //1.封装请求参数 7 YYUserInfoParam *params=[[YYUserInfoParam alloc]init]; 8 params.access_token=[YYAccountTool accountModel].access_token; 9 params.uid=[YYAccountTool accountModel].uid; 10 11 //2.发送网络请求 12 [YYUserTool userInfoWithParam:params success:^(YYUserInfoResult *result) { 13 14 //字典转模型 15 YYUserModel *user=result; 16 17 //设置标题 18 [self.titleButton setTitle:user.name forState:UIControlStateNormal]; 19 // 存储账号信息(需要先拿到账号) 20 YYAccountModel *account=[YYAccountTool accountModel]; 21 account.name=user.name; 22 //存储 23 [YYAccountTool save:account]; 24 } failure:^(NSError *error) { 25 YYLog(@"请求失败"); 26 }]; 27 28 // //1.封装请求参数 29 // NSMutableDictionary *params=[NSMutableDictionary dictionary]; 30 // params[@"access_token"] =[YYAccountTool accountModel].access_token; 31 // params[@"uid"]=[YYAccountTool accountModel].uid; 32 // 33 // //2.发送网络请求 34 // [YYHttpTool get:@"https://api.weibo.com/2/users/show.json" params:params success:^(id responseObj) { 35 // //字典转模型 36 // YYUserModel *user=[YYUserModel objectWithKeyValues:responseObj]; 37 // //设置标题 38 // [self.titleButton setTitle:user.name forState:UIControlStateNormal]; 39 // // 存储账号信息(需要先拿到账号) 40 // YYAccountModel *account=[YYAccountTool accountModel]; 41 // account.name=user.name; 42 // //存储 43 // [YYAccountTool save:account]; 44 // } failure:^(NSError *error) { 45 // YYLog(@"请求失败"); 46 // }]; 47 }
注意:需要包含相应的头文件
实现效果(标题文字先显示为“首页”,两秒钟之后变换为账号的用户名):
三、发微博业务的封装(不带图片的)
(1)新建一个模型类封装请求参数
查看新浪提供的发送接口所需要的请求参数:
封装请求参数类的代码设计:
YYSendStatusesParam.h文件
1 // 2 // YYSendStatusesParam.h 3 // 4 5 #import <Foundation/Foundation.h> 6 7 @interface YYSendStatusesParam : NSObject 8 /**access_token false string 采用OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获得。*/ 9 @property(nonatomic,copy)NSString *access_token; 10 11 /**status true string 要发布的微博文本内容,必须做URLencode,内容不超过140个汉字。*/ 12 @property(nonatomic,copy)NSString *status; 13 @end
YYSendStatusesParam.m文件不做处理
(2)新建一个模型类封装请求结果(返回结果)
封装请求结果类的代码设计:
1 // 2 // YYSendStatusesResult.h 3 // 4 5 #import "YYStatusModel.h" 6 7 @interface YYSendStatusesResult : YYStatusModel 8 9 @end
注意:因为新浪接口返回的json数据是微博字典,所以直接让该类继承自YYStatusModel。
(3)新建一个业务类封装专一的业务
代码设计:
YYStatusTool.h文件
1 // 2 // YYStatusTool.h 3 // 微博业务类:处理跟微博相关的一切业务,比如加载微博数据、发微博、删微博 4 5 #import <Foundation/Foundation.h> 6 #import "YYHomeStatusesParam.h" 7 #import "YYHomeStatusesResult.h" 8 #import "YYSendStatusesParam.h" 9 #import "YYSendStatusesResult.h" 10 11 @interface YYStatusTool : NSObject 12 /** 13 * 加载首页的微博数据 14 * 15 * @param param 请求参数 16 * @param success 请求成功后的回调(请将请求成功后想做的事情写到这个block中) 17 * @param failure 请求失败后的回调(请将请求失败后想做的事情写到这个block中) 18 */ 19 20 +(void)homeStatusesWithParam:(YYHomeStatusesParam *)param success:(void (^)(YYHomeStatusesResult *result))success failure:(void(^)(NSError *error))failure; 21 22 /** 23 * 发微博 24 * 25 * @param param 请求参数 26 * @param success 请求成功后的回调(请将请求成功后想做的事情写到这个block中) 27 * @param failure 请求失败后的回调(请将请求失败后想做的事情写到这个block中) 28 */ 29 30 +(void)sendStatusesWithParam:(YYSendStatusesParam *)param success:(void (^)(YYSendStatusesResult *result))success failure:(void(^)(NSError *error))failure; 31 32 @end
YYStatusTool.m文件
1 // 2 // YYStatusTool.m 3 // 4 5 #import "YYStatusTool.h" 6 #import "YYHttpTool.h" 7 #import "MJExtension.h" 8 @implementation YYStatusTool 9 10 +(void)homeStatusesWithParam:(YYHomeStatusesParam *)param success:(void (^)(YYHomeStatusesResult *))success failure:(void (^)(NSError *))failure 11 { 12 //把请求参数模型转换为字典 13 NSDictionary *params=param.keyValues; 14 15 [YYHttpTool get:@"https://api.weibo.com/2/statuses/home_timeline.json" params:params success:^(id responseObj) { 16 if (success) { 17 //把获取的数据(返回结果)由字典转换为模型 18 YYHomeStatusesResult *result=[YYHomeStatusesResult objectWithKeyValues:responseObj]; 19 success(result); 20 } 21 } failure:^(NSError *error) { 22 if (failure) { 23 failure(error); 24 } 25 }]; 26 } 27 28 +(void)sendStatusesWithParam:(YYSendStatusesParam *)param success:(void (^)(YYSendStatusesResult *))success failure:(void (^)(NSError *))failure 29 { 30 //把请求参数模型转换为字典 31 NSDictionary *params=param.keyValues; 32 33 [YYHttpTool post:@"https://api.weibo.com/2/statuses/update.json" params:params success:^(id responseObj) { 34 if (success) { 35 //把获取的数据(返回结果)由字典转换为模型 36 YYSendStatusesResult *result=[YYSendStatusesResult objectWithKeyValues:responseObj]; 37 success(result); 38 } 39 } failure:^(NSError *error) { 40 if (failure) { 41 failure(error); 42 } 43 }]; 44 } 45 @end
在发消息控制器中得使用:
1 /** 2 * 发送不带图片的微博 3 */ 4 -(void)sendStatusWithoutImage 5 { 6 //一、面向AFN框架 7 // 8 // //1.获得请求管理者 9 // AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; 10 // 11 // //2.封装请求参数 12 // NSMutableDictionary *params=[NSMutableDictionary dictionary]; 13 // params[@"access_token"] =[YYAccountTool accountModel].access_token; 14 // params[@"status"]=self.textView.text; 15 // 16 // //3.发送POST请求 17 // [mgr POST:@"https://api.weibo.com/2/statuses/update.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary*statusDict) { 18 // [MBProgressHUD showSuccess:@"发表成功"]; 19 // } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 20 // [MBProgressHUD showError:@"发表失败"]; 21 // }]; 22 // 23 // //4.关闭发送微博界面 24 //// [self dismissViewControllerAnimated:YES completion:nil]; 25 26 27 //二、面向YYHttpTool 28 //1.封装请求参数 29 // NSMutableDictionary *params=[NSMutableDictionary dictionary]; 30 // params[@"access_token"] =[YYAccountTool accountModel].access_token; 31 // params[@"status"]=self.textView.text; 32 // 33 // //2.发送网络请求 34 // [YYHttpTool post:@"https://api.weibo.com/2/statuses/update.json" params:params success:^(id responseObj) { 35 // [MBProgressHUD showSuccess:@"发表成功"]; 36 // } failure:^(NSError *error) { 37 // [MBProgressHUD showError:@"发表失败"]; 38 // }]; 39 40 41 //三、面向封装的业务类 42 //1.请求参数 43 YYSendStatusesParam *params=[[YYSendStatusesParam alloc]init]; 44 params.access_token=[YYAccountTool accountModel].access_token; 45 params.status=self.textView.text; 46 47 //2.发微博 48 [YYStatusTool sendStatusesWithParam:params success:^(YYSendStatusesResult *result) { 49 [MBProgressHUD showSuccess:@"发表成功"]; 50 } failure:^(NSError *error) { 51 [MBProgressHUD showError:@"发表失败"]; 52 }]; 53 }
注意:上述代码需要导入相关的头文件。
实现效果:
微博发送成功:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。