iOS--簡單封裝 AFNetworking網絡請求

1. 封裝的原因:

  • 如果我們用原生的AFNetworking 當然可以。可是你有沒有想過。
  • 如果你下次更新AFN的時候。它的網絡請求方法改了要怎么辦呢?
  • 所以我們只要封裝好AFN的代碼,下次我要改網絡請求的時候就直接在這個類里面寫幾句代碼就可以了。
  • 如果你沒有封裝。就要改所有的請求。一百多個地方就要改一百多次。那你還不累死。
  • 聰明人要懂的給自己,減少冗余的代碼!我希望那個人是你。

2. 封裝代碼的 .h 文件

2.1 首先 你得新建一個工具類 繼承自NSObject
.h文件代碼如下 可以直接復制使用
//
//  MOLoadHttpsData.h
//  AJ King
//
//  Created by 林杰 on 2016/12/27.
//  Copyright ? 2016年 TenMios. All rights reserved.
//  AFN 網絡請求框架的工具類

/**
 * 封裝的原因:下次我要改網絡請求的時候就直接在這個類里面寫一句代碼就可以了。
 *           而你沒有封裝。。就要改所有的請求。一百多個地方就要改一百多次。
 */


#import <Foundation/Foundation.h>


typedef void (^SuccessBlock) (id responseObject);

typedef void (^FailedBlock) (id error);

@interface MOLoadHttpsData : NSObject


/** Post 請求 */
+(void)PostHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock;

/** Get 請求 */
+(void)GetHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock;



@end




3. 封裝代碼的 .m 文件

//
//  MOLoadHttpsData.m
//  AJ King
//
//  Created by 林杰 on 2016/12/27.
//  Copyright ? 2016年 TenMios. All rights reserved.
//

#import "MOLoadHttpsData.h"

@implementation MOLoadHttpsData

/** Post 請求 */
+(void)PostHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock
{
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html",@"text/plain",nil];
    
    [manager POST:url parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        
        /** 這里是處理事件的回調 */
        if (successBlock) {
            successBlock(responseObject);
        }
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        
        /** 這里是處理事件的回調 */
        if (failureBlock) {
            failureBlock(error);
        }
    }
     ];
    
    
}


/** Get 請求 */
+(void)GetHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock{
    
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html",@"text/plain",nil];
    
    [manager GET:url parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        
        /** 這里是處理事件的回調 */
        if (successBlock) {
            successBlock(responseObject);
        }
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        
        /** 這里是處理事件的回調 */
        if (failureBlock) {
            failureBlock(error);
        }
    }
     
     ];
    
}

@end




4. 如何使用呢?

把封裝好的 工具類 放在PCH文件中。 這樣以后用到的時候也方便
    [MOLoadHttpsData GetHttpDataWithUrlStr:(這里填寫你要請求的接口地址) Dic:(這里填寫你要提交的參數) SuccessBlock:^(id responseObject) {
        
      /**
       **  在這里 可以獲取到成功返回的請求數據
       **/

   } FailureBlock:^(id error) {

      /**
       **  在這里 可以獲取到失敗返回的請求數據
       **/
    }];


工程實例 : (僅供參考)

    //  中間
    [SVProgressHUD showWithStatus:@"loading..."];
    [MOLoadHttpsData GetHttpDataWithUrlStr:HomeMidURL Dic:nil SuccessBlock:^(id responseObject) {
        
        NSDictionary *data = responseObject[@"data"];
        self.mids  = [MIOMidModel
                      mj_objectArrayWithKeyValuesArray:data[@"top"]];
        [self.collectionView reloadData];//加載完成  刷新數據
        [SVProgressHUD dismiss];
        
    } FailureBlock:^(id error) {
        // 友情提示
        [SVProgressHUD showErrorWithStatus:@"sorry ! please try again later"];
        
    }];


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容