Swift Alamofire 和 SwiftyJSON數(shù)據(jù)請(qǐng)求的封裝

  1. 用到三方,安裝方法不再贅述援奢。

  2. 創(chuàng)建HTTPManager.swift管理類(lèi)

  • 引入頭文件
import Alamofire
import SwiftyJSON
  • 創(chuàng)建API結(jié)構(gòu)體
struct API {
  //任何地方調(diào)用 API.hostName + '具體地址'待侵,
    static let hostName = "https://normal"
   //這里可以寫(xiě)其他的唆姐,用于測(cè)試
    static let hostNameTest = "http://test"

}
  • 創(chuàng)建管理類(lèi)單例
  class func sharedInstance() -> HTTPManager {
        struct Static {
            static let instance = HTTPManager()
        }
        return Static.instance
    }
  • 數(shù)據(jù)請(qǐng)求方法封裝
//MARK:數(shù)據(jù)請(qǐng)求方法
    
    ///數(shù)據(jù)請(qǐng)求方法
    ///- Parameters:
    ///     - url    : 接口地址
    ///     - type   : 請(qǐng)求類(lèi)型 GET,POST等
    ///     - params : 參數(shù) [String : AnyObject]
    ///     - success: 成功的回調(diào)
    ///     - failure: 失敗的回調(diào)
    func exchangeData(url:String,type:HTTPMethod,params:[String : AnyObject]?, success:@escaping ((_ json: JSON)->()),failure:@escaping ((_ json: String)->()) ){
        let headers: HTTPHeaders = [
          //這里配置headers
        ]
        Alamofire.request(url, method: type, parameters: params, encoding: URLEncoding.methodDependent,headers: headers).responseJSON { (response) in
            if(((response.response?.statusCode)! > 199) && ((response.response?.statusCode)! < 300)){
                //一般這里就是成功的
                if (response.result.value != nil) {
                  //獲取數(shù)據(jù)部位空就把數(shù)據(jù)返回
                    let a = JSON(response.result.value!);
                    success(a);
                }else{
                  //不然返回空
                    success([])
                }
            }else  if(response.response?.statusCode == 400){
                //出現(xiàn)報(bào)錯(cuò)信息
                //這些錯(cuò)誤代碼按需取用
                failure("\(String(describing: response.response?.statusCode))");
            }else if(response.response?.statusCode == 401){
                failure("用戶(hù)驗(yàn)證信息有誤");
            }else if(response.response?.statusCode == 404){
                failure("接口被外星人抓走了")
            }else if(response.response?.statusCode == 406){
                failure("接口版本不符合");
            }else if(response.response?.statusCode == 429){
                failure("請(qǐng)求頻率太高");
            }else if(response.response?.statusCode == 500){
                failure("服務(wù)器正在維護(hù)");
            }else{
                failure("服務(wù)器正在維護(hù)");

            }
        }
        
    }

  • 使用方法
   let url = API.hostName + "/api/hospitals";
   HTTPManager.sharedInstance().exchangeData(url: url, type: .get, params: nil, success: { (json) in
            print(json);
   }) { (reason) in
            print(reason);
    }
  • HTTPManager.swift的完整代碼如下
import Foundation
import Alamofire
import SwiftyJSON


struct API {
    //此處根據(jù)本地鍵值 debug ,用來(lái)作為baseURL,一個(gè)可以用來(lái)做測(cè)試的接口,一個(gè)定義為線上接口.可以設(shè)置一個(gè)按鈕得哆,管理debug字段迹辐,重啟app就可以更換接口
    static let hostName = "https://dev.api.healthydoc.com.cn/"
   
}
class HTTPManager: NSObject {
    class func sharedInstance() -> HTTPManager {
        struct Static {
            static let instance = HTTPManager()
        }
        return Static.instance
    }
    
    //MARK:數(shù)據(jù)請(qǐng)求方法
    
    ///數(shù)據(jù)請(qǐng)求方法
    ///- Parameters:
    ///     - url    : 接口地址
    ///     - type   : 請(qǐng)求類(lèi)型 GET,POST等
    ///     - params : 參數(shù) [String : AnyObject]
    ///     - success: 成功的回調(diào)
    ///     - failure: 失敗的回調(diào)


   
    func exchangeData(url:String,type:HTTPMethod,params:[String : AnyObject]?, success:@escaping ((_ json: JSON)->()),failure:@escaping ((_ json: String)->()) ){

        let accept = "application/json;" + version
        let headers: HTTPHeaders = [
           //......
        ]
        Alamofire.request(url, method: type, parameters: params, encoding: URLEncoding.methodDependent,headers: headers).responseJSON { (response) in
            if(((response.response?.statusCode)! > 199) && ((response.response?.statusCode)! < 300)){
                if (response.result.value != nil) {
                    let a = JSON(response.result.value!);
                    success(a);
                    
                }else{
                    success([])
                }
            }else  if(response.response?.statusCode == 400){
                failure("\(String(describing: response.response?.statusCode))");
            }else if(response.response?.statusCode == 401){
                failure("用戶(hù)驗(yàn)證信息有誤");
            }else if(response.response?.statusCode == 404){
                failure("接口被外星人抓走了")
            }else if(response.response?.statusCode == 406){
                failure("接口版本不符合");
            }else if(response.response?.statusCode == 429){
                failure("請(qǐng)求頻率太高");
            }else if(response.response?.statusCode == 500){
                failure("服務(wù)器正在維護(hù)");
            }else{
                failure("服務(wù)器正在維護(hù)");

            }
        }
        
    }
  
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呵萨,一起剝皮案震驚了整個(gè)濱河市撒犀,隨后出現(xiàn)的幾起案子某宪,更是在濱河造成了極大的恐慌仿村,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缩抡,死亡現(xiàn)場(chǎng)離奇詭異奠宜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瞻想,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)压真,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蘑险,你說(shuō)我怎么就攤上這事滴肿。” “怎么了佃迄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵泼差,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我呵俏,道長(zhǎng)堆缘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任普碎,我火速辦了婚禮吼肥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己缀皱,他們只是感情好斗这,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著啤斗,像睡著了一般表箭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钮莲,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天免钻,我揣著相機(jī)與錄音,去河邊找鬼崔拥。 笑死伯襟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的握童。 我是一名探鬼主播姆怪,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼澡绩!你這毒婦竟也來(lái)了稽揭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肥卡,失蹤者是張志新(化名)和其女友劉穎溪掀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體步鉴,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揪胃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氛琢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊递。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖阳似,靈堂內(nèi)的尸體忽然破棺而出骚勘,到底是詐尸還是另有隱情,我是刑警寧澤撮奏,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布俏讹,位于F島的核電站,受9級(jí)特大地震影響畜吊,放射性物質(zhì)發(fā)生泄漏泽疆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一玲献、第九天 我趴在偏房一處隱蔽的房頂上張望殉疼。 院中可真熱鬧逗嫡,春花似錦、人聲如沸株依。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恋腕。三九已至,卻和暖如春逆瑞,著一層夾襖步出監(jiān)牢的瞬間荠藤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工获高, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哈肖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓念秧,卻偏偏與公主長(zhǎng)得像淤井,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摊趾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)币狠、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 大海沒(méi)有說(shuō)出那些秘密砾层,那些秘密在人群中誕生漩绵,又在人群中消逝。但肛炮,總有一個(gè)人會(huì)以某種方式讓它變成永恒止吐,將它的羞恥拋回...
    古喵閱讀 517評(píng)論 4 0
  • 在蘭陵縣哪里有國(guó)家農(nóng)業(yè)公園
    李學(xué)成閱讀 158評(píng)論 0 0
  • 2016年電商的痛處在哪里碍扔? Todywu2016-4-9 我們天天埋怨電商難做,但是秕重,很多機(jī)構(gòu)鼓吹電商好做蕴忆,如何...
    todywu閱讀 680評(píng)論 0 49
  • 郭相麟 生活處處是學(xué)習(xí)的道場(chǎng),以眾生為師悲幅,把現(xiàn)實(shí)生活作為最好的教材套鹅,活學(xué)活用,實(shí)踐就會(huì)出新知汰具,假以時(shí)日卓鹿,就會(huì)讓生...
    郭相麟閱讀 359評(píng)論 0 0