Swift利用AFN實(shí)現(xiàn)封裝網(wǎng)絡(luò)請求詳解
前言
相信大家都知道,我們一般在一個(gè)項(xiàng)目中,網(wǎng)絡(luò)請求都封裝成一個(gè)單例,以確保整個(gè)項(xiàng)目的網(wǎng)絡(luò)請求 Session 是同一個(gè).
單例模式定義:一個(gè)類有且僅有一個(gè)實(shí)例,并且自行實(shí)例化向整個(gè)系統(tǒng)提供,下面話不多說了,來一起看看詳細(xì)的介紹吧。
通過cocoaPods 導(dǎo)入第三方框架
01-切換到項(xiàng)目目錄
cd 項(xiàng)目名稱
02-初始化Pods
pod init
03-打開 Pods 文件
open Podfile
04-編輯 Podfile
# 設(shè)置支持最低平臺 platform :ios, '8.0' target 'TestSwiftMixAFN' do # 如果是Swift項(xiàng)目,需添加"use_frameworks!" use_frameworks! pod "AFNetworking" end
05-安裝 Pods
pod install
封裝AFN網(wǎng)絡(luò)請求工具
1 創(chuàng)建一個(gè)工具類, 繼承自 AFHTTPSessionManager
import AFNetworking
class XMSessionManager: AFHTTPSessionManager {
// ...
}
2 通過單例創(chuàng)建一個(gè)AFHTTPSessionManager 實(shí)例
/// 創(chuàng)建網(wǎng)絡(luò)請求單例
static let shared: XMSessionManager = XMSessionManager()
----------------------------------------------------------------
/// 如果需要設(shè)置請求的屬性,可在閉包中添加
/// 在第一次訪問時(shí),執(zhí)行閉包,并且將結(jié)果保存在 shared 常量中
static let shared1: XMSessionManager = {
// 實(shí)例化對象
let manager = XMSessionManager()
// 設(shè)置響應(yīng)反序列化支持的數(shù)據(jù)類型
manager.responseSerializer.acceptableContentTypes?.insert("text/plain")
// 返回對象
return manager
}()
3 通過枚舉, 添加HTTP請求方法(GET/POST)
/// 枚舉-請求方法
///
/// - GET: GET
/// - POST: POST
enum 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í)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
利用swift實(shí)現(xiàn)卡片橫向滑動動畫效果的方法示例
卡片橫向滑動動畫效果相信對大家來說都不陌生,下面這篇文章主要給大家介紹了關(guān)于利用swift實(shí)現(xiàn)卡片橫向滑動動畫效果的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07
Swift自動調(diào)整視圖布局AutoLayout和AutoresizingMask功能詳解
這篇文章主要為大家介紹了Swift自動調(diào)整視圖布局AutoLayout和AutoresizingMask功能及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Swift編程中用以管理內(nèi)存的自動引用計(jì)數(shù)詳解
這篇文章主要介紹了Swift編程中用以管理內(nèi)存的自動引用計(jì)數(shù)詳解,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-11-11
Swift 3.0基礎(chǔ)學(xué)習(xí)之下標(biāo)
這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之下標(biāo)的相關(guān)資料,文中介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用swift具有一定的參考價(jià)值,需要的朋友下面來一起看看吧。2017-03-03
Swift利用Decodable解析JSON的一個(gè)小問題詳解
這篇文章主要給大家介紹了關(guān)于Swift利用Decodable解析JSON的一個(gè)小問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04

