iOS菜鳥之AFN的二次封裝,iosafn二次封裝

來源:互聯網
上載者:User

iOS菜鳥之AFN的二次封裝,iosafn二次封裝

我用一個單例類將一些常用的網路請求進行了二次封裝,主要包括post請求 get請求  圖片檔案上傳下載  視頻的斷點續傳等功能。

首先大家先去github上下載AFN,將檔案夾內的AFNetworking檔案夾拖入工程中,然後建立一個圖片檔案參數類代碼如下:

#import <Foundation/Foundation.h>@interface UploadParam : NSObject/** *  上傳檔案的位元據 */@property (nonatomic, strong) NSData *data;/** *  上傳的參數名稱 */@property (nonatomic, copy) NSString *name;/** *  上傳到伺服器的檔案名稱 */@property (nonatomic, copy) NSString *fileName;/** *  上傳檔案的類型 */@property (nonatomic, copy) NSString *mimeType;@end
#import "UploadParam.h"@implementation UploadParam@end

然後建立網路工具AFNManager具體代碼如下(此處我提供了代理和block兩種方式進行傳值供大家選擇):

#import <Foundation/Foundation.h>#import "AFNManagerDelegate.h"#import "UploadParam.h"@interface AFNManager : NSObject@property (nonatomic, weak) id<AFNManagerDelegate> delegate;/** *  AFNManager單利 */+(AFNManager *)sharedManager;#pragma mark --代理的方式傳值/** *  get */- (void)GET:(NSString *)URLString parameters:(id)parameters;/** *  post */- (void)Post:(NSString *)URLString parameters:(id)parameters;/** *  upload */- (void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadParam;#pragma mark --block的形式傳值/** *  get請求 */- (void)GET:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure;/** *  post請求 */- (void)Post:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure;/** *  upload */- (void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadParam succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure;#pragma mark --斷點續傳/** *  開始下載  斷點續傳 * *  @param URLString 請求介面 */- (void)downloadStartWithUrl:(NSString *)URLString fileName:(NSString *)fileName;/** *  開始上傳  斷點續傳 * *  @param URLString 請求介面 */- (void)uploadStartWithUrl:(NSString *)URLString fileData:(NSData *)fileData;/** *  暫停操作  斷點續傳 */- (void)operationPause;/** *  繼續操作  斷點續傳 */- (void)operationResume;/** *  取消操作 */- (void)operationCancel;@end
#import "AFNManager.h"#import "AFNetworking.h"@interface AFNManager(){    AFHTTPRequestOperation *operation; //建立要求管理(用於上傳和下載)}@endstatic AFNManager *manager = nil;@implementation AFNManager+(AFNManager *)sharedManager{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        if (manager == nil) {            manager = [[self alloc] init];        }    });    return manager;}+(instancetype)allocWithZone:(struct _NSZone *)zone{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        if (manager == nil) {                        manager = [super allocWithZone:zone];        }    });    return manager;}- (void)GET:(NSString *)URLString parameters:(id)parameters{    // 建立要求管理者    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];        [mgr GET:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {                if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {                        [self.delegate AFNManagerDidSuccess:responseObject];        }                    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {        if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {                        [self.delegate AFNManagerDidFaild:error];        }    }];}- (void)Post:(NSString *)URLString parameters:(id)parameters{    // 建立要求管理者    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];        [mgr POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {                if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {                        [self.delegate AFNManagerDidSuccess:responseObject];        }            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {                if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {                    [self.delegate AFNManagerDidFaild:error];        }    }];}- (void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadParam{    // 建立要求管理者    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];        [mgr POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // 上傳的檔案全部拼接到formData                /**         *  FileData:要上傳的檔案的位元據         *  name:上傳參數名稱         *  fileName:上傳到伺服器的檔案名稱         *  mimeType:檔案類型         */        [formData appendPartWithFileData:uploadParam.data name:uploadParam.name fileName:uploadParam.fileName mimeType:uploadParam.mimeType];                                } success:^(AFHTTPRequestOperation *operation, id responseObject) {        if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {                        [self.delegate AFNManagerDidSuccess:responseObject];        }            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {        if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {                       [self.delegate AFNManagerDidFaild:error];        }    }];    }-(void)GET:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id))succeed failure:(void (^)(NSError *))failure{    // 建立要求管理者    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];        [mgr GET:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {        if (responseObject == nil) {            return ;        }        succeed(responseObject);            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {                failure(error);    }];}-(void)Post:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id))succeed failure:(void (^)(NSError *))failure{    // 建立要求管理者    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];        [mgr POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {        if (responseObject == nil) {            return ;        }        succeed(responseObject);    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {                failure(error);    }];    }-(void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadParam succeed:(void (^)(id))succeed failure:(void (^)(NSError *))failure{    // 建立要求管理者    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];           [mgr POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // 上傳的檔案全部拼接到formData                /**         *  FileData:要上傳的檔案的位元據         *  name:上傳參數名稱         *  fileName:上傳到伺服器的檔案名稱         *  mimeType:檔案類型         */        [formData appendPartWithFileData:uploadParam.data name:uploadParam.name fileName:uploadParam.fileName mimeType:uploadParam.mimeType];              } success:^(AFHTTPRequestOperation *operation, id responseObject) {        if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {                       succeed(responseObject);        }            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {        if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {                        failure(error);        }    }];}-(void)downloadStartWithUrl:(NSString *)URLString fileName:(NSString *)fileName{    NSString *filePath = [NSString stringWithFormat:@"%@/Documents/%@",NSHomeDirectory(), fileName];        operation = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URLString]]];        operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];//    可以在此設定進度條    //    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {//        //    }];    __weak typeof(self) weakself = self;    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {        //        請求成功做出提示        if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {                        [weakself.delegate AFNManagerDidSuccess:responseObject];        }                    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {        //        請求失敗做出提示        if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {                        [weakself.delegate AFNManagerDidFaild:error];        }    }];        [operation start];}- (void)uploadStartWithUrl:(NSString *)URLString fileData:(NSData *)fileData{    operation = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URLString]]];        operation.inputStream = [[NSInputStream alloc] initWithData:fileData];    //    設定進度條//    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {//        //    }];    __weak typeof(self) weakself = self;    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {        //        請求成功做出提示        if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {                        [weakself.delegate AFNManagerDidSuccess:responseObject];        }                    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {        //        請求失敗做出提示        if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {                        [weakself.delegate AFNManagerDidFaild:error];        }    }];        [operation start];}- (void)operationPause{    [operation pause];}- (void)operationResume{    [operation resume];}- (void)operationCancel{    [operation cancel];}//網路監聽(用於檢測網路是否可以連結。此方法最好放於AppDelegate中,可以使程式開啟便開始檢測網路)- (void)reachabilityManager{    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];    //開啟網路監聽    [mgr.reachabilityManager startMonitoring];        //監聽網路變化    [mgr.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {        switch (status) {                                //當網路不可用(無網路或請求延時)            case AFNetworkReachabilityStatusNotReachable:                break;                                //當為手機WiFi時            case AFNetworkReachabilityStatusReachableViaWiFi:                break;                                //當為手機蜂窩資料網            case AFNetworkReachabilityStatusReachableViaWWAN:                break;                                //其它情況            default:                break;        }    }];        //    //停止網路監聽(若需要一直檢測網路狀態,可以不停止,使其一直運行)//    [mgr.reachabilityManager stopMonitoring];}@end

網路工具代理協議代碼如下:

#import <Foundation/Foundation.h>@class AFNManager;@protocol AFNManagerDelegate <NSObject>@optional/** *  發送請求成功 * *  @param manager AFNManager */-(void)AFNManagerDidSuccess:(id)data;/** *  發送請求失敗 * *  @param manager AFNManager */-(void)AFNManagerDidFaild:(NSError *)error;@end

有很多不足之處請大家多多指正,可以評論或點關注進行技術交流。後續也會寫一些自己平時學習的點點滴滴。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.