AFNetWorking 封装

1.Swift

import AFNetworking

let blogDomain = "com.baidu.data.error"

//swift 中的枚举
enum HTTPType : String {

    case POST = "POST"
    case GET = "GET"

}
//创建网络分类,隔离 AFN框架与 自身代码

class Networktools: AFHTTPSessionManager {
    //定义单例对象,设置属性
    static let shareTools : Networktools = {

        let baseUrl = "https://api.weibo.com/"
        let tools = Networktools(baseURL: NSURL(string: baseUrl))
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        return tools
    } ()

    func requestJsonDict( type : HTTPType , urlSting : String, parameters: [String : AnyObject]?,finished : (result : [String : AnyObject]? , error : NSError? )->() ) {

        if type == HTTPType.GET {

            GET(urlSting, parameters: parameters, success: { (_, result) -> Void in
                //判断是否是字典
                if let dict = result as? [String : AnyObject] {

                    finished(result: dict, error: nil)
                    return
                }

                //如果不是字典,返回自定义错误
                let dataError = NSError(domain: blogDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据错误"])

                finished(result: nil, error: dataError)

                }, failure: { (_, error) -> Void in
                    finished(result: nil, error: error)
                    print(error)
            })

        } else {

            POST(urlSting, parameters: parameters, success: { (_, result) -> Void in
                //判断是否是字典
                if let dict = result as? [String : AnyObject] {

                    finished(result: dict, error: nil)
                    return
                }

                //如果不是字典,返回自定义错误
                let dataError = NSError(domain: blogDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据错误"])
                finished(result: nil, error: dataError)

                }, failure: { (_, error) -> Void in
                    finished(result: nil, error: error)
                    print(error)
            })

        }
    }
    //上传图片的方法
    func uploadPicture(urlSting : String, parameters: [String : AnyObject]?,imageData : NSData,finished : (result : [String : AnyObject]? , error : NSError? )->() ){

        POST(urlSting, parameters: parameters, constructingBodyWithBlock: { (multipartFormData) -> Void in
            /**
            *  imageData,图片的二进制数据
                name : 上传到服务器的对应接口名
                fileName : 服务器接收到存储的名字
                mimeType : 上传文件的格式
            */
            multipartFormData.appendPartWithFileData(imageData, name: "pic", fileName: "OMG", mimeType: "image/jpeg")

            }, success: { (_, result) -> Void in
                //成功会掉
                if let dict = result as? [String : AnyObject] {

                    finished(result: dict, error: nil)
                }
            }) { (_, error) -> Void in

                //失败回调
                finished(result: nil, error: error)

        }

    }


}

2.OC

#import <Foundation/Foundation.h>
#import "AFNetworking.h"
typedef enum : NSUInteger {
  HTTPMethodPOST,
  HTTPMethodGET,
} HTTPMethod;
@interface XFNetworkTools : AFHTTPSessionManager

+ (instancetype)shareNetWorkTools;
/**
 *  封装网络,隔离 AFN 框架
 *
 *  @param httpMethod 请求类型
 *  @param urlString  接口
 *  @param parameters 参数
 *  @param finished   完成回调
 */
- (void)requestJsonDictWithHttpMothod:(HTTPMethod)httpMethod
                            Urlstring:(NSString *)urlString
                           Parameters:(NSDictionary *)parameters
                          AndFinished:(Finished)finished;

- (void)uploadImageWithUrlstring:(NSString *)urlString
                      Parameters:(NSDictionary *)parameters
                       ImageData:(NSData *)imageData
                     AndFinished:(Finished)finished;
@end

#import "XFNetworkTools.h"

static NSString *blogDomain = @"com.baidu.data.error";

@protocol XFNetworkToolsProxy <NSObject>

@optional
- (NSURLSessionDataTask *)
dataTaskWithHTTPMethod:(NSString *)method
             URLString:(NSString *)URLString
            parameters:(id)parameters
               success:(void (^)(NSURLSessionDataTask *, id))success
               failure:(void (^)(NSURLSessionDataTask *, NSError *))failure;

@end

@interface XFNetworkTools () <XFNetworkToolsProxy>

@end

@implementation XFNetworkTools

static XFNetworkTools *singleTools = nil;
+ (instancetype)shareNetWorkTools {

  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    //末尾要加"/"
    singleTools = [[self alloc]
        initWithBaseURL:[NSURL URLWithString:@"https://api.weibo.com/"]];
    //设置反序列化的格式
    singleTools.responseSerializer.acceptableContentTypes = [NSSet
        setWithObjects:@"application/json", @"text/json", @"text/javascript",
                       @"text/html", @"text/plain", nil];
  });
  return singleTools;
}

- (void)requestJsonDictWithHttpMothod:(HTTPMethod)httpMethod
                            Urlstring:(NSString *)urlString
                           Parameters:(NSDictionary *)parameters
                          AndFinished:(Finished)finished {
  //  NSString *methodName = (httpMethod == HTTPMethodGET) ? @"GET" : @"POST";
  //
  //  [self dataTaskWithHTTPMethod:methodName
  //      URLString:urlString
  //      parameters:parameters
  //      success:^(NSURLSessionDataTask *task, id responseObject) {
  //        if ([responseObject isKindOfClass:[NSDictionary class]]) {
  //          finished(nil, responseObject);
  //        } else {
  //          NSError *dataError = [[NSError alloc]
  //              initWithDomain:blogDomain
  //                        code:-10000
  //                    userInfo:@{
  //                      NSLocalizedDescriptionKey : @"数据错误"
  //                    }];
  //          finished(dataError, nil);
  //        }
  //
  //      }
  //      failure:^(NSURLSessionDataTask *task, NSError *error) {
  //        finished(error, nil);
  //      }];

  if (httpMethod == HTTPMethodPOST) {
    [self POST:urlString
        parameters:parameters
        success:^(NSURLSessionDataTask *_Nonnull task,
                  id _Nonnull responseObject) {
          if ([responseObject isKindOfClass:[NSDictionary class]]) {
            finished(nil, responseObject);
          } else {
            NSError *dataError = [[NSError alloc]
                initWithDomain:blogDomain
                          code:-10000
                      userInfo:@{
                        NSLocalizedDescriptionKey : @"数据错误"
                      }];
            finished(dataError, nil);
          }

        }
        failure:^(NSURLSessionDataTask *_Nullable task,
                  NSError *_Nonnull error) {
          finished(error, nil);
        }];
  } else {
    [self GET:urlString
        parameters:parameters
        success:^(NSURLSessionDataTask *_Nonnull task,
                  id _Nonnull responseObject) {

          if ([responseObject isKindOfClass:[NSDictionary class]]) {
            //成功的回调
            finished(nil, responseObject);
          } else {
            NSError *dataError = [[NSError alloc]
                initWithDomain:blogDomain
                          code:-10000
                      userInfo:@{
                        NSLocalizedDescriptionKey : @"数据错误"
                      }];
            finished(dataError, nil);
          }
        }
        failure:^(NSURLSessionDataTask *_Nullable task,
                  NSError *_Nonnull error) {
          finished(error, nil);
        }];
  }
}

- (void)uploadImageWithUrlstring:(NSString *)urlString
                      Parameters:(NSDictionary *)parameters
                       ImageData:(NSData *)imageData
                     AndFinished:(Finished)finished {

  [self POST:urlString
      parameters:parameters
      constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
        /**
         *  FileData 图片二进制数据
             name  上传到服务器的对应接口名
              fileName 保存到服务器的图片名字
              mimeType 图片类型
         */
        [formData appendPartWithFileData:imageData
                                    name:@"pic"
                                fileName:@"tupian"
                                mimeType:@"image/jpeg"];
      }
      success:^(NSURLSessionDataTask *_Nonnull task,
                id _Nonnull responseObject) {
        finished(nil, responseObject);
      }
      failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {
        finished(error, nil);
      }];
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值