iOS 封裝網(wǎng)絡(luò)請(qǐng)求工具類(基于AFNetworking)

為什么要封裝.png

一.封裝的好處

  • 可以降低網(wǎng)絡(luò)請(qǐng)求方法與Controller(控制器)的耦合度,即使網(wǎng)絡(luò)使用的第三方框架發(fā)生不兼容、錯(cuò)誤等問(wèn)題從而想換框架時(shí),也不用到每個(gè)控制器里面改代碼(50、60頁(yè)面會(huì)改到想哭).
  • 建立單例工具類,方便管理
  • 優(yōu)化代碼結(jié)構(gòu)

二.網(wǎng)絡(luò)請(qǐng)求工具類(OC)

1.導(dǎo)入框架和創(chuàng)建類

1).先導(dǎo)入第三方庫(kù)AFNetworking
2).建立NetworkTool類繼承于AFHTTPSessionManager,繼承于AFHTTPSessionManager的原因是發(fā)送請(qǐng)求需要調(diào)用到manager,而直接繼承于AFHTTPSessionManager可以直接調(diào)用內(nèi)部的方法

2.添加網(wǎng)絡(luò)請(qǐng)求方法和實(shí)現(xiàn)

1).方法聲明

  • 首先確定要傳入的參數(shù),有網(wǎng)址、請(qǐng)求參數(shù)、GET/POST方法,當(dāng)網(wǎng)絡(luò)請(qǐng)求成功后,會(huì)有responseObject回調(diào),所以還需要傳入一個(gè)block
/**
 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求工具類的單例
 */
+ (instancetype)sharedTool;

/**
 創(chuàng)建請(qǐng)求方法
 */
- (void)requestWithURLString: (NSString *)URLString
                  parameters: (NSDictionary *)parameters
                      method: (NSString *)method
                    callBack: (void(^)(id responseObject))callBack;

2).方法實(shí)現(xiàn)

單例
+ (instancetype)sharedTool {
    static id instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] initWithBaseURL:nil];
    });
    
    return instance;
}
網(wǎng)絡(luò)請(qǐng)求方法
- (void)requestWithURLString: (NSString *)URLString
                  parameters: (NSDictionary *)parameters
                      method: (NSString *)method
                    callBack: (void (^)(id))callBack {
    
    //判斷請(qǐng)求方法是GET還是POST
    if ([method isEqualToString:@"GET"]) {
        //調(diào)用AFN框架的方法
        [self GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            //如果請(qǐng)求成功,則回調(diào)responseObject
            callBack(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            //如果請(qǐng)求失敗,控制臺(tái)打印錯(cuò)誤信息
            NSLog(@"%@",error);
        }];
    }
    
    if ([method isEqualToString:@"POST"]) {
        [self POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            callBack(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"%@",error);
        }];
    }
}

三.網(wǎng)絡(luò)請(qǐng)求工具類(Swift)

1.新建SwiftNetworkTool.swift文件,SwiftNetworkTool類繼承于AFHTTPSessionManager

網(wǎng)絡(luò)請(qǐng)求工具類(Swift).png

2.Swift版簡(jiǎn)潔好用,直接上代碼

//單例
    static let shared = SwiftNetworkTool()
    
    //網(wǎng)絡(luò)中間層的接口方法
    func request(urlString: String, parameters: [String: Any]? = nil, method: String, callBack: @escaping (_ responseObject: Any?) -> ()) {
        
        //網(wǎng)絡(luò)請(qǐng)求成功的閉包
        let succes = {
            (task: URLSessionDataTask, response: Any?) in
            callBack(response)
        }
        
        //網(wǎng)絡(luò)請(qǐng)求失敗的閉包
        let failure = {
            (task: URLSessionDataTask?, error: Error) in
            print("\(error)")
            callBack(nil)
        }
        
        if method == "GET" {
            self.get(urlString, parameters: parameters, progress: nil, success: succes, failure: failure)
        }
        
        if method == "POST" {
            self.post(urlString, parameters: parameters, progress: nil, success: succes, failure: failure)
        }
    }

總結(jié):鑒于公司請(qǐng)求的東西很多,所以只封了這些方法,以后遇到別的可以繼續(xù)加。
網(wǎng)絡(luò)請(qǐng)求工具類源碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,342評(píng)論 4 61
  • 看清這個(gè)世界然后愛(ài)它?不如在快要看清之前及時(shí)打住,會(huì)保留更多美好與輕松!
    往226閱讀 150評(píng)論 0 0
  • 前言 其實(shí)早應(yīng)該翻譯三叉神經(jīng)痛了,因?yàn)檫@是過(guò)去一年我所在的西典門診主要治療的疾病之一。三叉神經(jīng)痛號(hào)稱“天下第一痛”...
    付維亮閱讀 1,702評(píng)論 0 0
  • 1.form表單提交的安全機(jī)制: Django不允許對(duì)form表單進(jìn)行隨意的提交,會(huì)提示403的錯(cuò)誤,要想成功對(duì)表...
    我是一條池中魚(yú)閱讀 751評(píng)論 0 0

友情鏈接更多精彩內(nèi)容