天天看點

AFNetworking簡單封裝(Block形式)

前言

之前寫了

AFNetworking

的基本用法 這次就簡單的封裝一下

封裝

ZJAFNetworkingKit.h

#import <Foundation/Foundation.h>
#import "AFNetworking/AFNetworking.h"

typedef void(^ZJAFNetworkingBlock)(bool success,id responseObject,NSError * error);
@interface ZJAFNetworkingKit : NSObject

+ (void)saveCookies;
+ (void)loadCookies;
+ (void)getWithUrl:(NSString *) url pars:(NSDictionary *) pars callback:(ZJAFNetworkingBlock) callback;
+ (void)getWithUrl:(NSString *) url pars:(NSDictionary *) pars auth:(NSString *) auth callback:(ZJAFNetworkingBlock) callback;
+ (void)postWithUrl:(NSString *) url pars:(NSDictionary *) pars callback:(ZJAFNetworkingBlock) callback;
+ (void)postWithUrl:(NSString *) url pars:(NSDictionary *) pars auth:(NSString *) auth callback:(ZJAFNetworkingBlock) callback;
@end           

複制

ZJAFNetworkingKit.m

#import <Foundation/Foundation.h>
#import "ZJAFNetworkingKit.h"

@implementation ZJAFNetworkingKit

+ (void)saveCookies{
    NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject: cookiesData forKey: @"sessionCookies"];
    [defaults synchronize];
    
}
+ (void)loadCookies{
    NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]];
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    
    for (NSHTTPCookie *cookie in cookies){
        [cookieStorage setCookie: cookie];
    }
}



+ (void)getWithUrl:(NSString *) url pars:(NSDictionary *) pars callback:(ZJAFNetworkingBlock) callback{
    [ZJAFNetworkingKit getWithUrl:url pars:pars auth:nil callback:callback];
}

+ (void)getWithUrl:(NSString *)url pars:(NSDictionary *)pars auth:(NSString *)auth callback:(ZJAFNetworkingBlock)callback{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    if(auth){
        [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@ %@", @"Bearer", auth] forHTTPHeaderField:@"Authorization"];
    }
    
    //GET/POST
    [manager GET:url
       parameters:pars
         progress:^(NSProgress * _Nonnull downloadProgress) {
             
         }
          success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
              callback(true,responseObject,nil);
          }
          failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull   error) {
              callback(false,nil,error);
          }];
}

+ (void)postWithUrl:(NSString *)url pars:(NSDictionary *)pars auth:(NSString *)auth callback:(ZJAFNetworkingBlock)callback{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    if(auth){
        [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@ %@", @"Bearer", auth] forHTTPHeaderField:@"Authorization"];
    }
    
    //GET/POST
    [manager POST:url
       parameters:pars
         progress:^(NSProgress * _Nonnull downloadProgress) {
             
         }
          success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
              callback(true,responseObject,nil);
          }
          failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull   error) {
              callback(false,nil,error);
          }];
}

+ (void)postWithUrl:(NSString *)url pars:(NSDictionary *)pars callback:(ZJAFNetworkingBlock)callback{
    [ZJAFNetworkingKit postWithUrl:url pars:pars auth:nil callback:callback];
}

@end           

複制

簡單使用

實體類

ZJUser.h

#import <objc/NSObject.h>

@interface ZJUser : NSObject
@property(readwrite,nonatomic,assign) int userId;
@property(nonatomic,copy)NSString* name;
@end           

複制

ZJUser.m

#import <Foundation/Foundation.h>
#import "ZJUser.h"

@implementation ZJUser

@end           

複制

ZJResult.h

#import <objc/NSObject.h>

@interface ZJResult<objectType:NSObject *> : NSObject
@property(nonatomic,copy)NSString* state;
@property(nonatomic,copy)NSString* message;
@property(nonatomic,strong)objectType data;
@end           

複制

ZJResult.m

#import <Foundation/Foundation.h>
#import "ZJResult.h"

@implementation ZJResult

@end           

複制

配合YYModel的用法

NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典裡面添加需要送出的參數
[parametersDic setObject:userName forKey:@"userName"];
[parametersDic setObject:userPwd forKey:@"password"];
    
    
[ZJAFNetworkingKit postWithUrl:ZJAPI_USERLOGIN pars:parametersDic callback:^(bool success, id responseObject, NSError *error) {
    if(success){
        ZJResult<ZJUser *> *result = [ZJResult<ZJUser *> yy_modelWithJSON:responseObject];
        result.data = [ZJUser yy_modelWithJSON:responseObject[@"data"]];
        NSLog(@"%@",result.message);
        NSLog(@"%@",result.data.name);
    }else{
        NSLog(@"%@",error);  //這裡列印錯誤資訊
    }
}];           

複制