美文网首页
AFNetworking 的封装<一>

AFNetworking 的封装<一>

作者: 默默_前行 | 来源:发表于2016-12-13 10:15 被阅读0次

    由于之前不太会用简书写文章,第一次写出来的东西不规整.现在重新整理一下.
    对于AFNetworking的网络请求,大家应该都不陌生.经过实际的开发和自己的总结,现分享一套比价方便实用的封装请求.当然,每个项目的网络对接各异,这里也只是做出一个样例的展示,我们还是要根据自己项目的实际情况来封装AFN方法.
    .h文件

    #importtypedef NS_ENUM(NSUInteger,HttpRequestType) {
    HttpRequestTypeGet = 0,//get
    HttpRequestTypePost//post
    };
    @interface GlobelRequest : NSObject
    /**
    *  发送get请求
    *  @param URLString  请求的网址字符串
    *  @param parameters 请求的参数
    *  @param success    请求成功的回调
    *  @param failure    请求失败的回调
    */
    + (void)getWithURLString:(NSString *)URLString parameters (id)parameters success:(void (^)(NSDictionary * responseObject))success failure:(void (^)(NSError *error))failure;
    /**
    *  发送post请求
    *  @param URLString  请求的网址字符串
    *  @param parameters 请求的参数
    *  @param success    请求成功的回调
    *  @param failure    请求失败的回调
    */
    + (void)postWithURLString:(NSString *)URLString parameters (id)parameters success:(void (^)(NSDictionary * responseObject))success failure:(void (^)(NSError *error))failure;
    /**
    *  发送网络请求---get/post 通用
    *  @param URLString  请求的网址字符串
    *  @param parameters  请求的参数
    *  @param type        请求的类型
    *  @param resultBlock 请求的结果
    */
    + (void)requestWithURLString:(NSString *)URLString parameters:(id)parameters type:(HttpRequestType)type success:(void (^)(NSDictionary * responseObject))success failure:(void (^)(NSError * error))failure;
    @end
    

    .m文件

    #import "GlobelRequest.h"
    #import "AFNetworking.h"
    @implementation GlobelRequest
    #pragma mark -- GET请求 --
    + (void)getWithURLString:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSDictionary * responseObject))success failure:(void (^)(NSError *))failure {
          AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 可以接受的类型
         manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    // 请求队列的最大并发数
    // manager.operationQueue.maxConcurrentOperationCount = 5;
    // 请求超时的时间
    // manager.requestSerializer.timeoutInterval = 5;
    [manager GET:URLString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if (success) {
    NSDictionary * dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
    success(dictionary);
    }}  failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    if (failure) {
    failure(error);
    }}];
    }
    #pragma mark -- POST请求 --
    + (void)postWithURLString:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSDictionary * responseObject))success failure:(void (^)(NSError *error))failure{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    //manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if (success) {
    NSDictionary * dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
    success(dictionary);
    //success(responseObject);
    }}  failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    if (failure) {
    failure(error);
    }}];
    }
    #pragma mark -- POST/GET网络请求 --
    + (void)requestWithURLString:(NSString *)URLString
    parameters:(id)parameters
    type:(HttpRequestType)type
    success:(void (^)(NSDictionary * responseObject))success
    failure:(void (^)(NSError * error))failure {
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    //manager.requestSerializer = [AFJSONRequestSerializer serializer];
    // [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];//此句代码酌情增加.
    switch (type) {
    case HttpRequestTypeGet:
    { [manager GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if (success) {
    NSDictionary * dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
    success(dictionary);
    }}  failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    if (failure) {
    failure(error);
    }}];
    }
    break;
    case HttpRequestTypePost:
    {
    [manager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if (success) {
    NSDictionary * dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
    success(dictionary);
    //success(responseObject);
    }}  failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    if (failure) {
    failure(error);
    }}];
    }
    break;
    }
    }
    @end
    

    这里是AFNetworking的常用封装.关于图片上传的方法暂未涉及.往后会继续总结.篇幅不想写太长,第二个问题请见下一篇简书.

    相关文章

      网友评论

          本文标题:AFNetworking 的封装<一>

          本文链接:https://www.haomeiwen.com/subject/gqivmttx.html