首页 > 代码库 > iOS开发项目篇—37封装其他业务
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.h3 //4 5 #import "YYUserModel.h"6 7 @interface YYUserInfoResult : YYUserModel8 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 : NSObject10 /**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 YYUserTool10 +(void)userInfoWithParam:(YYUserInfoParam *)param success:(void (^)(YYUserInfoResult *result))success failure:(void (^)(NSError *error))failure11 {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.h3 //4 5 #import "YYStatusModel.h"6 7 @interface YYSendStatusesResult : YYStatusModel8 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 : NSObject12 /**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 *))failure11 {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 *))failure29 {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 //二、面向YYHttpTool28 //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 }
注意:上述代码需要导入相关的头文件。
实现效果:
微博发送成功: