為防止項目污染,另外考慮到今后項目的更新維護,便于網絡請求框架的切換,通常需要將AFN封裝一個類使用
Swift下:
import UIKit
import AFNetworking
enum MethodType: String {
case POST = "POST"
case GET = "GET"
}
class JSNetworkTool: AFHTTPSessionManager {
//創建網絡單例對象
static let sharedNetworkTool: JSNetworkTool = {
let tool = JSNetworkTool()
tool.responseSerializer.acceptableContentTypes?.insert("text/plain")
return tool
}()
//網絡請求公共方法
func request(requestMethod: MethodType, urlString: String, parameters: AnyObject?, success: (response: AnyObject?)->(), failure: (error: NSError)->()) -> Void {
if requestMethod == MethodType.GET {
//GET請求
self.GET(urlString, parameters: parameters, progress: { progress in
//進度
}, success: { (NSURLSessionDataTask, response) in
//請求成功回調
success(response: response)
}, failure: { (NSURLSessionDataTask, error) in
//請求失敗回調
failure(error: error)
})
}else{
//POST請求
self.POST(urlString, parameters: parameters, progress: { progress in
//進度
}, success: { (NSURLSessionDataTask, response) in
//請求成功回調
success(response: response)
}, failure: { (NSURLSessionDataTask, error) in
//請求失敗回調
failure(error: error)
})
}
}
}
使用演示
extension JSNetworkTool {
func oauthLoadUserAccount(code: String, success: (response: AnyObject?)->(), failure: (error: NSError)->() ) -> Void {
let urlString = "https://api.weibo.com/oauth2/access_token"
let parameters = [
"client_id":APPKEY,
"client_secret":APPSECRET,
"grant_type":"authorization_code",
"code":code,
"redirect_uri":REDIRECT_URI
]
self.request(MethodType.POST, urlString: urlString, parameters: parameters, success: { (response) in
success(response: response)
}) { (error) in
failure(error: error)
}
}
}
OC下:
#import "NetworkTools.h"
/// 網絡請求枚舉類型
typedef enum : NSUInteger {
GET,
POST,
} CZRequestMethod;
@implementation NetworkTools
+ (instancetype)sharedTools {
static NetworkTools *tools;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
tools = [[self alloc] initWithBaseURL:nil];
// 設置響應數據格式
tools.responseSerializer.acceptableContentTypes = [tools.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
});
//tools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html" ,nil];
return tools;
}
- (void)request:(CZRequestMethod)method URLString:(NSString *)URLString parameters:(id)parameters finished:(void (^)(id result, NSError *error))finished {
// GET請求
if (method == GET) {
[self GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
finished(responseObject, nil);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
finished(nil, error);
}];
}else{
// 反之 POST請求
[self POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
finished(responseObject, nil);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
finished(nil, error);
}];
}
}
// 使用(.h中提供對外的方法)
- (void)uploadPersonInfo:(NSString *)name age:(NSInteger)age finished:(void (^)(id result, NSError *error))finished{
NSDictionary *paramters = @{@"name":name,@"age":@(age)};
[self request:POST URLString:serverHost parameters:paramters finished:finished];
}
@end