首页 > 代码库 > 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 }

注意:上述代码需要导入相关的头文件。

实现效果:

  

微博发送成功: