在我們開發(fā)App的時候,經(jīng)常要和網(wǎng)絡請求打交道。也許你不知道NSURLSession,或者你也不知道NSURLConnection,亦或者你不知道NSURLSessionManager,但是在開發(fā)中你一定聽過AFNetworking這個框架。是的,這個框架是幾個大牛對蘋果原生網(wǎng)絡請求的封裝,它里面的內(nèi)容我今天不在這里做講解,等哪天專門抽時間來好好的聊聊這個牛逼的AFN框架。今天來聊的是基于這個框架的對網(wǎng)絡請求的二次封裝。
有的人會問,這個框架本身不是已經(jīng)進行封裝了嗎,干嘛還要進行二次封裝,有這個閉眼嗎?我想說的是,有這個必要。因為我們每次在調(diào)用這個框架的時候需要去寫很多重復性的代碼,這樣有兩個弊端:第一就是,你的項目中垃圾代碼滿天飛,第二就是,你調(diào)用后臺接口的時候不能夠保持接口的統(tǒng)一性。我想,做過開發(fā)的人都知道封裝的好處,這里就不啰嗦了。
我今天處理的是基于這個AFN的二次封裝,實現(xiàn)了項目中最常見的post和get請求,以及上傳圖片到服務器的功能。
下面首先看下我的demo中的層級結構:

首先創(chuàng)建的是一個基于AFHTTSessionManager的SessiomManager的類,在這個類中,有服務器接受的請求的類型,服務器響應的時間戳,以及向服務器請求的類型。下面是代碼:

在我們進行網(wǎng)絡請求的的時候也需要時時刻刻監(jiān)聽網(wǎng)絡的狀態(tài),在這里我直接用了一個很好的Reachability類,這是蘋果已經(jīng)寫好的了監(jiān)聽網(wǎng)絡改變的功能強大的類,直接附上代碼:

在這里我用了一個bool值類型的值來判斷是否有網(wǎng)絡,具體的如果想判斷是哪一種網(wǎng)絡狀態(tài)的話也很簡單,里面有網(wǎng)絡的wifi狀態(tài),wlan狀態(tài)還有所謂的unknow的狀態(tài)。
接下來創(chuàng)建了一個繼承自NSObject的NetWorkCall的類,下面直接看這個類中的方法:

這三個類方法中有些參數(shù)的意思已經(jīng)標明了,在這里我用了SVProgressHUD這個第三方,參數(shù)show也是用來判斷要不要顯示加載的提示信息。當然,也可用MBProgressHUD。
下面是方法的實現(xiàn)的代碼:






在上傳圖片的實現(xiàn)中,為了也出現(xiàn)圖片名為空的情況,需要做一個處理為空的處理,上面我已經(jīng)處理過了。我這里支持多想圖片或者單張圖片上傳到服務器上面。
在這些方法中主要是用到了幾個block,這幾個block的運用就是起到向后臺發(fā)送請求后,在接受到服務器請求以后回調(diào)后臺返回過來的數(shù)據(jù)。
下面是我借用公司本地開發(fā)環(huán)境下的一個簡單的接口,來測試一下我的一個網(wǎng)絡請求。下面是一段代碼:

測試結果是好的,在這里,我就不顯示服務器返回過來的數(shù)據(jù)了。上面就是一個簡單的思路和代碼,如有不足之處,歡迎指正。
我一直相信,沒有demo的技術文章就是在耍流氓,下面附上demo地址:https://github.com/15221532825/iOSNetWorkManager
如果覺得有一點幫助,可以到這個鏈接地址查看詳細代碼。謝謝!