iOS – AFNetworking 네트워크 요청의 간단한 캡슐화

4367 단어

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 
    
    
    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"];
            
        }];
    
    
    

    좋은 웹페이지 즐겨찾기