首先建一个公共类, 里面放类方法, 作为项目中公共使用方法的集合.
//1. PublicWay.h
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
@interface PublicWay : NSObject
#pragma mark - POST请求
+ (void)POST:(NSString *)urlString
parameters:(NSDictionary *)parameters
progress:(void (^)(NSProgress *progress))progress
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure;
@end
// 2. PublicWay.m
@implementation PublicWay
+ (void)POST:(NSString *)urlString
parameters:(NSDictionary *)parameters
progress:(void (^)(NSProgress *progress))progress
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 12.f;
//设置支持的数据类型
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager POST:urlString parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
if (progress) {
progress(uploadProgress);
}
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
success(responseObject);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
@end
3. 调用:
NSString *url = xxxxx;
NSDictionary *parameters = @{@"xxx" : xxxx};
[PublicWay POST:url parameters:parameters progress:nil success:^(id responseObject) {
} failure:^(NSError *error) {
XWLog(@"请求失败, error:%@", error);
}];
4.好处: AFN是项目中使用最频繁的类, 封装起来不仅减少调用的代码, 更有意想不到的大用处, 需要对请求数据进行统一处理时, 就可以在这一个方法中处理了, 不必一个个修改.例如, 用户正在使用app, 但你这个用户忽然被管理人员删除了, 要想进行提示, 就可以在获取到请求返回数据的信息后, 弹出提示框.进行相应的处理.
+ (void)POST:(NSString *)urlString
parameters:(NSDictionary *)parameters
progress:(void (^)(NSProgress *progress))progress
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 12.f;
//设置支持的数据类型
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager POST:urlString parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
if (progress) {
progress(uploadProgress);
}
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
//如果已被删除, 提示退出还是切换账号
if ([responseObject[@"code"] intValue] == 444) {
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
[app showDeletedAlert];
} else {
success(responseObject);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}