①封裝
創(chuàng)建一個(gè)新的類,我暫且命名為HttpRequest
.h文件
#import <Foundation/Foundation.h>
@class AFNetworking;
@interface HttpRequest : NSObject
+(HttpRequest *)sharedInstance;
-(void)GET:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure;
-(void)POST:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure;
@end
.m文件
#import "HttpRequest.h"
#import "AFNetworking.h"
@implementation HttpRequest
/**
* 創(chuàng)建網(wǎng)絡(luò)請求類的單例
*/
static HttpRequest *httpRequest = nil;
+(HttpRequest *)sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (httpRequest == nil) {
httpRequest = [[self alloc] init];
}
});
return httpRequest;
}
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (httpRequest == nil) {
httpRequest = [super allocWithZone:zone];
}
});
return httpRequest;
}
-(instancetype)copyWithZone:(NSZone *)zone
{
return httpRequest;
}
/**
*封裝AFN的GET請求
*@param URLString 網(wǎng)絡(luò)請求地址
*@param dict 參數(shù)(可以是字典或者nil)
*@param succeed 成功后執(zhí)行success block
*@param failure 失敗后執(zhí)行failure block
*/
- (void)GET:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure
{
//創(chuàng)建網(wǎng)絡(luò)請求管理對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//申明返回的結(jié)果是json類型
manager.responseSerializer = [AFJSONResponseSerializer serializer];
//申明請求的數(shù)據(jù)是json類型
manager.requestSerializer = [AFJSONRequestSerializer serializer];
//如果報(bào)接受類型不一致請?zhí)鎿Q一致text/html或別的
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil nil];
//發(fā)送網(wǎng)絡(luò)請求(請求方式為GET)
[manager GET:URLString parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
succeed(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(error);
}];
}
/**
* 封裝AFN的POST請求
*
* @param URLString 網(wǎng)絡(luò)請求地址
* @param dict 參數(shù)(可以是字典或者nil)
* @param succeed 成功后執(zhí)行success block
* @param failure 失敗后執(zhí)行failure block
*/
- (void)POST:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure
{
//創(chuàng)建網(wǎng)絡(luò)請求管理對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//申明返回的結(jié)果是json類型
manager.responseSerializer = [AFJSONResponseSerializer serializer];
//申明請求的數(shù)據(jù)是json類型
manager.requestSerializer = [AFJSONRequestSerializer serializer];
//如果報(bào)接受類型不一致請?zhí)鎿Q一致text/html或別的
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil nil];
//發(fā)送網(wǎng)絡(luò)請求(請求方式為POST)
[manager POST:URLString parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
succeed(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(error);
}];
}
@end
②使用
調(diào)用時(shí)代碼很少,很方便使用(也可以把調(diào)用的代碼寫成代碼片段,提高效率)
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:<#(nonnull id), ...#>, nil nil];
HttpRequest *httpRequest = [HttpRequest sharedInstance];
[httpRequest GET:<#(NSString *)#> dict:dict succeed:^(id data) {
NSLog(@"%@", data);
} failure:^(NSError *error) {
NSLog(@"%@", error);
}];
如果不需要傳參數(shù),就不用創(chuàng)建dict了,get請求那里直接寫nil就行.
post跟get一樣,除了把get改成post,其余地方都不用改動(dòng)