美文网首页iOS网络iOS笔记
iOS开发:对AFNetworking进行封装

iOS开发:对AFNetworking进行封装

作者: First灬DKS | 来源:发表于2016-05-05 13:27 被阅读5173次

网上也有很多的对AFNetworking进行封装的方法,此处我只是简单的记录一下;

首先,我们创建一个继承与NSObject的类,定义两个属性,分别是请求成功和请求失败的,.h中的代码如下:

#import <Foundation/Foundation.h>

typedef void (^SuccessBlock)(NSDictionary *data);
typedef void (^FailureBlock)(NSError *error);

@interface SYNetworkingManager : NSObject

@property (nonatomic, copy) SuccessBlock successBlock;
@property (nonatomic, copy) FailureBlock failureBlock;

/**
 *  发送get请求
 *
 *  @param URLString  请求的网址字符串
 *  @param parameters 请求的参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 */
+ (void)getWithURLString:(NSString *)urlString
              parameters:(id)parameters
                 success:(SuccessBlock)successBlock
                 failure:(FailureBlock)failureBlock;

/**
 *  发送post请求
 *
 *  @param URLString  请求的网址字符串
 *  @param parameters 请求的参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 */
+ (void)postWithURLString:(NSString *)urlString
               parameters:(id)parameters
                  success:(SuccessBlock)successBlock
                  failure:(FailureBlock)failureBlock;

@end

.m中的实现如下:

+ (void)getWithURLString:(NSString *)urlString
              parameters:(id)parameters
                 success:(SuccessBlock)successBlock
                 failure:(FailureBlock)failureBlock
{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    /**
     *  可以接受的类型
     */
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    /**
     *  请求队列的最大并发数
     */
    //    manager.operationQueue.maxConcurrentOperationCount = 5;
    /**
     *  请求超时的时间
     */
    manager.requestSerializer.timeoutInterval = outTime;
    [manager GET:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (successBlock) {
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
            successBlock(dic);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failureBlock) {
            failureBlock(error);
            NSLog(@"网络异常 - T_T%@", error);
        }
    }];
}

+ (void)postWithURLString:(NSString *)urlString
               parameters:(id)parameters
                  success:(SuccessBlock)successBlock
                  failure:(FailureBlock)failureBlock
{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer.timeoutInterval = outTime;
    [manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (successBlock) {
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
            successBlock(dic);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failureBlock) {
            failureBlock(error);
            NSLog(@"网络异常 - T_T%@", error);
        }
    }];
}

以上只是对post和get请求的封装,如果有好的建议和好的文章,我很乐意学习!

相关文章

网友评论

  • Pony风:楼主put方法呢?
    Pony风:@First灬DKS :blush:
    First灬DKS:当时只是简单的写了POST、GET,至于PUT方法,还是要麻烦你网上搜一下资料;:smile:
  • 梁森的简书:对AFN进行一次封装的好处是什么呢?
    除了替换网络请求类方便。
    First灬DKS:只是操作起来方便,维护性强些;当然你也完全可以不封装的使用,看个人爱好吧...
  • 棍武中原:当然是啊楼主,但是我真的没有看到你的解析写在哪里啊。可能小弟水平有限
    First灬DKS:@棍武中原 我不知道这一行代码算不算解析:NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
  • 棍武中原:你返回的是dic?我看像json数据啊亲
    First灬DKS:@棍武中原 JSON数据也是要转化成字典或者数组才可以去使用吧!
  • 棍武中原:楼主,一班封装都是解析好json数据的可以直接在控制台打印的,你这里痘没有啊。
    First灬DKS:@棍武中原 最后返回的dic,不就是解析的数据吗?

本文标题:iOS开发:对AFNetworking进行封装

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