国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

Swift利用AFN實現(xiàn)封裝網(wǎng)絡(luò)請求詳解

2020-03-09 17:43:54
字體:
供稿:網(wǎng)友

前言

相信大家都知道,我們一般在一個項目中,網(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)的支持。


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沭阳县| 江孜县| 本溪市| 公主岭市| 金乡县| 天镇县| 沽源县| 中阳县| 苗栗市| 洛川县| 资阳市| 广水市| 宝清县| 修水县| 政和县| 万载县| 军事| 马山县| 汤阴县| 敦化市| 扎鲁特旗| 同仁县| 广丰县| 垫江县| 高碑店市| 平江县| 壤塘县| 同心县| 霍林郭勒市| 珠海市| 康马县| 什邡市| 理塘县| 桂阳县| 琼结县| 高要市| 贡觉县| 托克逊县| 白朗县| 蓬溪县| 吴川市|