AFN網絡工具封裝

為防止項目污染,另外考慮到今后項目的更新維護,便于網絡請求框架的切換,通常需要將AFN封裝一個類使用

Swift下:

import UIKit
import AFNetworking
enum MethodType: String {
    
    case POST = "POST"
    case GET = "GET"
}
class JSNetworkTool: AFHTTPSessionManager {
    
    //創建網絡單例對象
    static let sharedNetworkTool: JSNetworkTool = {
        let tool = JSNetworkTool()
        tool.responseSerializer.acceptableContentTypes?.insert("text/plain")
        return tool
    }()
    
    //網絡請求公共方法
    func request(requestMethod: MethodType, urlString: String, parameters: AnyObject?, success: (response: AnyObject?)->(), failure: (error: NSError)->()) -> Void {
        
        if requestMethod == MethodType.GET {
            //GET請求
            self.GET(urlString, parameters: parameters, progress: { progress in
                //進度
                
                }, success: { (NSURLSessionDataTask, response) in
                    //請求成功回調
                    success(response: response)
                    
                }, failure: { (NSURLSessionDataTask, error) in
                    //請求失敗回調
                    failure(error: error)
            })
            
        }else{
            //POST請求
            self.POST(urlString, parameters: parameters, progress: { progress in
                //進度
                
                }, success: { (NSURLSessionDataTask, response) in
                    //請求成功回調
                    success(response: response)
                    
                }, failure: { (NSURLSessionDataTask, error) in
                    //請求失敗回調
                    failure(error: error)
            })
            
        }
        
        
    }

    
}

使用演示

extension JSNetworkTool {
    
    func oauthLoadUserAccount(code: String, success: (response: AnyObject?)->(), failure: (error: NSError)->() ) -> Void {
        
        let urlString = "https://api.weibo.com/oauth2/access_token"
        let parameters = [
            "client_id":APPKEY,
            "client_secret":APPSECRET,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":REDIRECT_URI
        ]
        
        self.request(MethodType.POST, urlString: urlString, parameters: parameters, success: { (response) in
            
            success(response: response)
            
        }) { (error) in
            
            failure(error: error)
            
        }
        
    }
   
}

OC下:

#import "NetworkTools.h"

/// 網絡請求枚舉類型
typedef enum : NSUInteger {
    GET,
    POST,
} CZRequestMethod;
@implementation NetworkTools

+ (instancetype)sharedTools {
    static NetworkTools *tools;
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        tools = [[self alloc] initWithBaseURL:nil];
        
        // 設置響應數據格式
        tools.responseSerializer.acceptableContentTypes = [tools.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
    });
        //tools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html" ,nil];
    return tools;
}

- (void)request:(CZRequestMethod)method URLString:(NSString *)URLString parameters:(id)parameters finished:(void (^)(id result, NSError *error))finished {
    // GET請求
    if (method == GET) {
        [self GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            finished(responseObject, nil);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            finished(nil, error);
        }];
        
    }else{
        // 反之 POST請求
        [self POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            finished(responseObject, nil);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            finished(nil, error);
        }];
    }
    
}

// 使用(.h中提供對外的方法)
- (void)uploadPersonInfo:(NSString *)name age:(NSInteger)age finished:(void (^)(id result, NSError *error))finished{
    NSDictionary *paramters = @{@"name":name,@"age":@(age)};
    [self request:POST URLString:serverHost parameters:paramters finished:finished];
}
@end

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

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,180評論 4 61
  • 生靈似乎約定屏息 漫天飛舞的雪花,肆意降臨 萬物欣欣然地罩上一襲白色新裝 思緒停止 時光停止 世界停止 小心翼翼地...
    英子_0a2d閱讀 204評論 4 2
  • 在我懂事開始就有這口井,這井聽爺爺說在他懂事的時也就有了,估計是十七或十八世紀的吧。 這井離我家相距...
    潮州男閱讀 431評論 1 0
  • (殷殷清風 綿綿雨水情) 殷殷清風起 起來起吹 我好想好想你, 綿綿雨承情 情思情了 君是我們的魂。 天推子滿果累...
    萬里千年閱讀 263評論 16 26
  • 2017年10月28日 自從寶寶上次的作文得到老師的表揚后,寶寶對寫作文的自信心和把握度都大大提高。 今天,在寫“...
    李華英閱讀 184評論 0 0