概述封裝步驟
- block方式
1、Status模型
- 創(chuàng)建模型類
2、StatusesResult模型
+(封裝加載首頁微博數(shù)據(jù)的返回結(jié)果)
@property (nonatomic, strong) NSArray *statuses; /** 微博數(shù)組(裝著Status模型) */
@property (nonatomic, assign) int total_number;/** 近期的微博總數(shù) */
3、StatusParams模型
+(封裝加載首頁微博數(shù)據(jù)的請求參數(shù) 屏蔽請求參數(shù),不暴漏給外面)
@property (nonatomic, copy) NSString *access_token;
@property (nonatomic, strong) NSNumber *since_id;
4、HTPPTool
+(屏蔽AFN, 網(wǎng)絡請求工具類:負責整個項目的所有HTTP請求)
+ (void)get:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
// 1.獲得請求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2.發(fā)送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發(fā)送網(wǎng)絡請求)
發(fā)送請求
+ (void)getWithUrl:(NSString *)url param:(id)param resultClass:(Class)resultClass success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
NSDictionary *params = [param keyValues]; // 導入頭文件 #import <MJExtension.h>
[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 業(yè)務類
- 微博業(yè)務類:處理跟微博相關(guān)的一切業(yè)務,比如加載微博數(shù)據(jù)、發(fā)微博、刪微博)
例如:獲取首頁網(wǎng)絡數(shù)據(jù)
+ (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 業(yè)務類使用:獲取網(wǎng)絡數(shù)據(jù),展示到VC的視圖中
- 例如:加載微博數(shù)據(jù) StatusTool
[JPStatusTool homeStatusesWithParam:param success:^(JPHomeStatusesResult *result) {
// 獲得最新的微博數(shù)組
NSArray *newStatuses = result.statuses;
// 將新數(shù)據(jù)插入到舊數(shù)據(jù)的最前面
NSRange range = NSMakeRange(0, newStatuses.count);
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];
[self.statuses insertObjects:newStatuses atIndexes:indexSet];
// 重新刷新表格
[self.tableView reloadData];
// 讓刷新控件停止刷新(恢復默認的狀態(tài))
[refreshControl endRefreshing];
// 提示用戶最新的微博數(shù)量
[self showNewStatusesCount:newStatuses.count];
} failure:^(NSError *error) {
JPLog(@"請求失敗--%@", error);
// 讓刷新控件停止刷新(恢復默認的狀態(tài))
[refreshControl endRefreshing];
}];