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

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

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

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

}
  • 創(chuàng)建管理類單例
  class func sharedInstance() -> HTTPManager {
        struct Static {
            static let instance = HTTPManager()
        }
        return Static.instance
    }
  • 數(shù)據(jù)請求方法封裝
//MARK:數(shù)據(jù)請求方法
    
    ///數(shù)據(jù)請求方法
    ///- Parameters:
    ///     - url    : 接口地址
    ///     - type   : 請求類型 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)報錯信息
                //這些錯誤代碼按需取用
                failure("\(String(describing: response.response?.statusCode))");
            }else if(response.response?.statusCode == 401){
                failure("用戶驗證信息有誤");
            }else if(response.response?.statusCode == 404){
                failure("接口被外星人抓走了")
            }else if(response.response?.statusCode == 406){
                failure("接口版本不符合");
            }else if(response.response?.statusCode == 429){
                failure("請求頻率太高");
            }else if(response.response?.statusCode == 500){
                failure("服務(wù)器正在維護");
            }else{
                failure("服務(wù)器正在維護");

            }
        }
        
    }

  • 使用方法
   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 ,用來作為baseURL,一個可以用來做測試的接口,一個定義為線上接口.可以設(shè)置一個按鈕,管理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ù)請求方法
    
    ///數(shù)據(jù)請求方法
    ///- Parameters:
    ///     - url    : 接口地址
    ///     - type   : 請求類型 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("用戶驗證信息有誤");
            }else if(response.response?.statusCode == 404){
                failure("接口被外星人抓走了")
            }else if(response.response?.statusCode == 406){
                failure("接口版本不符合");
            }else if(response.response?.statusCode == 429){
                failure("請求頻率太高");
            }else if(response.response?.statusCode == 500){
                failure("服務(wù)器正在維護");
            }else{
                failure("服務(wù)器正在維護");

            }
        }
        
    }
  
}

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

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,087評論 4 61
  • 大海沒有說出那些秘密,那些秘密在人群中誕生,又在人群中消逝。但,總有一個人會以某種方式讓它變成永恒,將它的羞恥拋回...
    古喵閱讀 594評論 4 0
  • 在蘭陵縣哪里有國家農(nóng)業(yè)公園
    李學(xué)成閱讀 171評論 0 0
  • 2016年電商的痛處在哪里? Todywu2016-4-9 我們天天埋怨電商難做,但是,很多機構(gòu)鼓吹電商好做,如何...
    todywu閱讀 720評論 0 49
  • 郭相麟 生活處處是學(xué)習(xí)的道場,以眾生為師,把現(xiàn)實生活作為最好的教材,活學(xué)活用,實踐就會出新知,假以時日,就會讓生...
    郭相麟閱讀 433評論 0 0

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