1. 封裝的原因:
- 如果我們用原生的AFNetworking 當(dāng)然可以猬膨≈ǎ可是你有沒有想過。
- 如果你下次更新AFN的時候仪搔。它的網(wǎng)絡(luò)請求方法改了要怎么辦呢?
- 所以我們只要封裝好AFN的代碼蜻牢,下次我要改網(wǎng)絡(luò)請求的時候就直接在這個類里面寫幾句代碼就可以了烤咧。
- 如果你沒有封裝。就要改所有的請求抢呆。一百多個地方就要改一百多次煮嫌。那你還不累死。
- 聰明人要懂的給自己抱虐,減少冗余的代碼昌阿!我希望那個人是你。
2. 封裝代碼的 .h 文件
2.1 首先 你得新建一個工具類 繼承自NSObject
.h文件代碼如下 可以直接復(fù)制使用
//
// MOLoadHttpsData.h
// AJ King
//
// Created by 林杰 on 2016/12/27.
// Copyright ? 2016年 TenMios. All rights reserved.
// AFN 網(wǎng)絡(luò)請求框架的工具類
/**
* 封裝的原因:下次我要改網(wǎng)絡(luò)請求的時候就直接在這個類里面寫一句代碼就可以了。
* 而你沒有封裝宝泵。好啰。就要改所有的請求。一百多個地方就要改一百多次儿奶。
*/
#import <Foundation/Foundation.h>
typedef void (^SuccessBlock) (id responseObject);
typedef void (^FailedBlock) (id error);
@interface MOLoadHttpsData : NSObject
/** Post 請求 */
+(void)PostHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock;
/** Get 請求 */
+(void)GetHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock;
@end
3. 封裝代碼的 .m 文件
//
// MOLoadHttpsData.m
// AJ King
//
// Created by 林杰 on 2016/12/27.
// Copyright ? 2016年 TenMios. All rights reserved.
//
#import "MOLoadHttpsData.h"
@implementation MOLoadHttpsData
/** Post 請求 */
+(void)PostHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html",@"text/plain",nil];
[manager POST:url parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/** 這里是處理事件的回調(diào) */
if (successBlock) {
successBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
/** 這里是處理事件的回調(diào) */
if (failureBlock) {
failureBlock(error);
}
}
];
}
/** Get 請求 */
+(void)GetHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html",@"text/plain",nil];
[manager GET:url parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/** 這里是處理事件的回調(diào) */
if (successBlock) {
successBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
/** 這里是處理事件的回調(diào) */
if (failureBlock) {
failureBlock(error);
}
}
];
}
@end
4. 如何使用呢框往?
把封裝好的 工具類 放在PCH文件中。 這樣以后用到的時候也方便
[MOLoadHttpsData GetHttpDataWithUrlStr:(這里填寫你要請求的接口地址) Dic:(這里填寫你要提交的參數(shù)) SuccessBlock:^(id responseObject) {
/**
** 在這里 可以獲取到成功返回的請求數(shù)據(jù)
**/
} FailureBlock:^(id error) {
/**
** 在這里 可以獲取到失敗返回的請求數(shù)據(jù)
**/
}];
工程實例 : (僅供參考)
// 中間
[SVProgressHUD showWithStatus:@"loading..."];
[MOLoadHttpsData GetHttpDataWithUrlStr:HomeMidURL Dic:nil SuccessBlock:^(id responseObject) {
NSDictionary *data = responseObject[@"data"];
self.mids = [MIOMidModel
mj_objectArrayWithKeyValuesArray:data[@"top"]];
[self.collectionView reloadData];//加載完成 刷新數(shù)據(jù)
[SVProgressHUD dismiss];
} FailureBlock:^(id error) {
// 友情提示
[SVProgressHUD showErrorWithStatus:@"sorry ! please try again later"];
}];