拿走即用之afn封裝(OC版)
afn封裝
一旦AFN有較大的變動,用到AFN的項目需要更改很多的地方,為了避免這種情況,一般會對AFN封裝出一個類,這樣有了變動之后,只需要更改這個類即可(代碼如下)
.h文件
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger, RequestMethod)
{
post,
get
};
@interface NetworkTools : NSObject
- (instancetype)shareNetworkTools;
/**
- requestMethod:請求方式
- urlString:請求地址
- parameters:請求參數
- responseBlock:請求成功或失敗的回調
*/
- (void)requestWithMethod:(RequestMethod)requestMethod andUrlString:(NSString )urlString andParameters:(id) parameters andFinished:(void(^)(id response, NSError error))responseBlock;
/**
- data:上傳資料
- name:上傳資料的名字
- urlString:請求地址
- parameters:請求參數
- responseBlock:請求成功或失敗的回調
*/
- (void)requestWithData:(NSData )data andName:(NSString )name andUrlString:(NSString )urlString andParameters:(id) parameters andFinished:(void(^)(id response, NSError error))responseBlock;
@end</code></pre>
.m文件
#import "NetworkTools.h"
import <AFNetworking.h>
@implementation NetworkTools
(instancetype)shareNetworkTools
{
static NetworkTools *networkTools = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
networkTools = [[NetworkTools alloc] init];
});
return networkTools;
}
(void)requestWithMethod:(RequestMethod)requestMethod andUrlString:(NSString )urlString andParameters:(id) parameters andFinished:(void(^)(id response, NSError error))responseBlock
{
// 定義成功的block
void (^success)(NSURLSessionDataTask dataTask, id responseObject) = ^(NSURLSessionDataTask dataTask,id responseObject)
{
responseBlock(responseObject, nil);
};
// 定義失敗的block
void (^failure)(NSURLSessionDataTask dataTask,NSError error) = ^(NSURLSessionDataTask dataTask,NSError error)
{
responseBlock(nil, error);
};
if (requestMethod == get) {
[[AFHTTPSessionManager manager] GET:urlString parameters:parameters success:success failure:failure];
} else {
[[AFHTTPSessionManager manager] POST:urlString parameters:parameters success:success failure:failure];
}
}
(void)requestWithData:(NSData )data andName:(NSString )name andUrlString:(NSString )urlString andParameters:(id) parameters andFinished:(void(^)(id response, NSError error))responseBlock
{
void (^success)(NSURLSessionDataTask dataTask, id responseObject) = ^(NSURLSessionDataTask dataTask,id responseObject)
{
responseBlock(responseObject, nil);
};
void (^failure)(NSURLSessionDataTask dataTask,NSError error) = ^(NSURLSessionDataTask dataTask,NSError error)
{
responseBlock(nil, error);
};
[[AFHTTPSessionManager manager] POST:urlString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileData:data name:name fileName:@"aa" mimeType:@"application/octet-stream"];
} success:success failure:failure];
}
@end</code></pre>
via:http://www.jianshu.com/p/37ba814bb66d