1.封装之前需要一个第三方库:AFNetworking
2.在.h文件内声明两个参数Block
#import <Foundation/Foundation.h>
第一个参数:请求完成后将转换成Data的数据输出
typedef void (^RequestComplete)(NSData *data);
第二个参数:请求结束后,刷新UI
typedef void (^UpdateUI)();
@interface RequestManager :NSObject
这个方法是自写的一个“+”方法,里面的参数url:请求的网址,parameter:网址的参数,method:请求的方法一般有两种POST和GET,complete:请求完要做的事,updateUI:刷新UI。
+ (void)fetchDataWithUrl:(NSString *)url parameter:(NSDictionary *)parameters method:(NSString *)method complete:(RequestComplete)complete updateUI(UpdateUI)update;
@end
3.在.m文件内实现方法
#import "RequestManager.h"
导入第三方头文件
#import <AFNetworking.h>
@implementation RequestManager
请求数据,根据类型会自动识别请求方式
+ (void)fetchDataWithUrl:(NSString *)url parameter:(NSDictionary *)parameters method:(NSString *)method complete:(RequestComplete)complete updateUI:(UpdateUI)update{
//创建请求对象并设置请求对象的属性
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//这里用一个子线程进行请求
dispatch_async(dispatch_get_global_queue(0,0),^{
if ([method isEqualToString:@"GET"]){
[manager GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//把Data数据传出去
complete((NSData *)responseObject);
//回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
//刷新UI
update();
});
}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}else{
[manager POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//把Data传出去
complete((NSData *)responseObject);
//回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
//刷新UI
update();
});
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
});
}
@end
网友评论