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 }

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

实现效果:

  

微博发送成功:

iOS开发项目篇—37封装其他业务,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。