前言
相信大家都知道,我們一般在一個項目中,網(wǎng)絡(luò)請求都封裝成一個單例,以確保整個項目的網(wǎng)絡(luò)請求 Session 是同一個.
單例模式定義:一個類有且僅有一個實例,并且自行實例化向整個系統(tǒng)提供,下面話不多說了,來一起看看詳細(xì)的介紹吧。
通過cocoaPods 導(dǎo)入第三方框架
01-切換到項目目錄
cd 項目名稱
02-初始化Pods
pod init
03-打開 Pods 文件
open Podfile
04-編輯 Podfile
# 設(shè)置支持最低平臺platform :ios, '8.0'target 'TestSwiftMixAFN' do # 如果是Swift項目,需添加"use_frameworks!" use_frameworks!pod "AFNetworking"end
05-安裝 Pods
pod install
封裝AFN網(wǎng)絡(luò)請求工具
1 創(chuàng)建一個工具類, 繼承自 AFHTTPSessionManager
import AFNetworkingclass XMSessionManager: AFHTTPSessionManager { // ...}
2 通過單例創(chuàng)建一個AFHTTPSessionManager 實例
/// 創(chuàng)建網(wǎng)絡(luò)請求單例static let shared: XMSessionManager = XMSessionManager()----------------------------------------------------------------/// 如果需要設(shè)置請求的屬性,可在閉包中添加/// 在第一次訪問時,執(zhí)行閉包,并且將結(jié)果保存在 shared 常量中 static let shared1: XMSessionManager = { // 實例化對象 let manager = XMSessionManager() // 設(shè)置響應(yīng)反序列化支持的數(shù)據(jù)類型 manager.responseSerializer.acceptableContentTypes?.insert("text/plain") // 返回對象 return manager }()
3 通過枚舉, 添加HTTP請求方法(GET/POST)
/// 枚舉-請求方法////// - GET: GET/// - POST: POSTenum XMHTTPMethod { case GET case POST}
4 自定義網(wǎng)絡(luò)請求方法,通過閉包回調(diào)請求完成后的數(shù)據(jù)
/// 封裝網(wǎng)絡(luò)請求方法 /// /// - Parameters: /// - Method: GET/POST, 默認(rèn)是GET請求 /// - URLString: 請求地址 /// - parameters: 參數(shù) /// - completed: 結(jié)束回調(diào) func request(Method:XMHTTPMethod = .GET, URLString: String,parameters: [String: AnyObject]?, completed:@escaping ((_ json: AnyObject?, _ isSuccess: Bool)->())) { /// 定義成功回調(diào)閉包 let success = { (task: URLSessionDataTask,json: Any?)->() in completed(json as AnyObject?,true) } /// 定義失敗回調(diào)閉包 let failure = {(task: URLSessionDataTask?, error: Error)->() in completed(nil,false) } /// 通過請求方法,執(zhí)行不同的請求 // 如果是 GET 請求 if Method == .GET { // GET get(URLString, parameters: parameters, progress: nil, success: success, failure: failure) } else { // POST post(URLString, parameters: parameters, progress: nil, success: success, failure: failure) } }
5 網(wǎng)絡(luò)請求工具的使用
///GET 請求 XMSessionManager.shared.request(URLString: "http:xxx", parameters: nil, completed:{(json: AnyObject?,isSuccess: Bool)-> () in // 請求成功 if isSuccess { print(json ?? "") } else { print("請求失敗") } })///POST 請求 XMSessionManager.shared.request(URLString: "www.xxx.xxx", parameters: ["key":"value" as AnyObject], completed:{(json: AnyObject?,isSuccess: Bool)-> () in // 請求成功 if isSuccess { print(json ?? "") } else { print("請求失敗") } })
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。
新聞熱點
疑難解答
圖片精選