博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络层封装
阅读量:6289 次
发布时间:2019-06-22

本文共 2927 字,大约阅读时间需要 9 分钟。

概述封装步骤

  • block方式

1、Status模型

  • 创建模型类

2、StatusesResult模型

+(封装加载首页微博数据的返回结果)

@property (nonatomic, strong) NSArray *statuses; /** 微博数组(装着Status模型) */ @property (nonatomic, assign) int total_number;/** 近期的微博总数 */

3、StatusParams模型

+(封装加载首页微博数据的请求参数 屏蔽请求参数,不暴漏给外面)

@property (nonatomic, copy) NSString *access_token; @property (nonatomic, strong) NSNumber *since_id;

4、HTPPTool

+(屏蔽AFN, 网络请求工具类:负责整个项目的所有HTTP请求)

+ (void)get:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure { // 1.获得请求管理者 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; // 2.发送GET请求 [mgr GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObj) { if (success) { success(responseObj); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (failure) { failure(error); } }]; }

5 、抽取BaseTool

  • 使用HttpTool(借助AFN发送网络请求)

发送请求

+ (void)getWithUrl:(NSString *)url param:(id)param resultClass:(Class)resultClass success:(void (^)(id))success failure:(void (^)(NSError *))failure { NSDictionary *params = [param keyValues]; // 导入头文件 #import 
[HttpTool get:url params:params success:^(id responseObj) { if (success) { id result = [resultClass objectWithKeyValues:responseObj]; success(result); } } failure:^(NSError *error) { if (failure) { failure(error); } }]; }
再次抽取,代码相同地方抽取一个父类出来,因为很多类,都需要处理,使用BaseTool后更加简化,更通用
  • 例如:获取用户信息
+ (void)userInfoWithParam:(JPUserInfoParam *)param success:(void (^)(JPUserInfoResult *))success failure:(void (^)(NSError *))failure{    [self getWithUrl:@"https://api.weibo.com/2/users/show.json" param:param resultClass:[UserInfoResult class] success:success failure:failure]; }

6、JPStatusTool 业务类

  • 微博业务类:处理跟微博相关的一切业务,比如加载微博数据、发微博、删微博)
例如:获取首页网络数据
+ (void)homeStatusesWithParam:(HomeStatusesParam *)param success:(void (^)(HomeStatusesResult *))success failure:(void (^)(NSError *))failure{ [self getWithUrl:@"https://api.weibo.com/2/statuses/home_timeline.json" param:param resultClass:[HomeStatusesResult class] success:success failure:failure]; }

7、JPStatusTool 业务类使用:获取网络数据,展示到VC的视图中

  • 例如:加载微博数据 StatusTool
[JPStatusTool homeStatusesWithParam:param success:^(JPHomeStatusesResult *result) {        // 获得最新的微博数组        NSArray *newStatuses = result.statuses;         // 将新数据插入到旧数据的最前面         NSRange range = NSMakeRange(0, newStatuses.count); NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; [self.statuses insertObjects:newStatuses atIndexes:indexSet]; // 重新刷新表格 [self.tableView reloadData]; // 让刷新控件停止刷新(恢复默认的状态) [refreshControl endRefreshing]; // 提示用户最新的微博数量 [self showNewStatusesCount:newStatuses.count]; } failure:^(NSError *error) { JPLog(@"请求失败--%@", error); // 让刷新控件停止刷新(恢复默认的状态) [refreshControl endRefreshing]; }];
 

文/iOS_成才录(简书作者)
原文链接:http://www.jianshu.com/p/0c75bc8ac0be#
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载于:https://www.cnblogs.com/dengniqukanhai/p/5629939.html

你可能感兴趣的文章
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>