发布网友 发布时间:2022-04-23 03:55
共3个回答
懂视网 时间:2022-04-23 08:16
这次给大家带来AFN封装网络请求详解,AFN封装网络请求的注意事项有哪些,下面就是实战案例,一起来看一下。相信大家都知道,我们一般在一个项目中,网络请求都封装成一个单例,以确保整个项目的网络请求 Session 是同一个.
单例模式定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供,下面话不多说了,来一起看看详细的介绍吧。
通过cocoaPods 导入第三方框架
01-切换到项目目录
cd 项目名称
02-初始化Pods
pod init
03-打开 Pods 文件
open Podfile
04-编辑 Podfile
# 设置支持最低平台 platform :ios, '8.0' target 'TestSwiftMixAFN' do # 如果是Swift项目,需添加"use_frameworks!" use_frameworks! pod "AFNetworking" end
05-安装 Pods
pod install
封装AFN网络请求工具
1 创建一个工具类, 继承自 AFHTTPSessionManager
import AFNetworking class XMSessionManager: AFHTTPSessionManager { // ... }
2 通过单例创建一个AFHTTPSessionManager 实例
/// 创建网络请求单例 static let shared: XMSessionManager = XMSessionManager() ---------------------------------------------------------------- /// 如果需要设置请求的属性,可在闭包中添加 /// 在第一次访问时,执行闭包,并且将结果保存在 shared 常量中 static let shared1: XMSessionManager = { // 实例化对象 let manager = XMSessionManager() // 设置响应反序列化支持的数据类型 manager.responseSerializer.acceptableContentTypes?.insert("text/plain") // 返回对象 return manager }()
3 通过枚举, 添加HTTP请求方法(GET/POST)
/// 枚举-请求方法 /// /// - GET: GET /// - POST: POST enum XMHTTPMethod { case GET case POST }
4 自定义网络请求方法,通过闭包回调请求完成后的数据
/// 封装网络请求方法 /// /// - Parameters: /// - Method: GET/POST, 默认是GET请求 /// - URLString: 请求地址 /// - parameters: 参数 /// - completed: 结束回调 func request(Method:XMHTTPMethod = .GET, URLString: String,parameters: [String: AnyObject]?, completed:@escaping ((_ json: AnyObject?, _ isSuccess: Bool)->())) { /// 定义成功回调闭包 let success = { (task: URLSessionDataTask,json: Any?)->() in completed(json as AnyObject?,true) } /// 定义失败回调闭包 let failure = {(task: URLSessionDataTask?, error: Error)->() in completed(nil,false) } /// 通过请求方法,执行不同的请求 // 如果是 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 网络请求工具的使用
///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("请求失败") } })
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
热心网友 时间:2022-04-23 05:24
通常涉及到的网络请求在项目中为了方便管理,我们都会做成一个SDK 统一进行调用管理。一般的网络请求方面不会涉及到资源的管理和相关图标的展示之类的,所以封装成一个.a文件更加方便一下。封装的具体步骤可以参考这篇博文:http://www.cnblogs.com/linfenren/p/6003513.html。本篇博文主要阐述SDK 封装的时候的一些注意事项和相关的调试方法。热心网友 时间:2022-04-23 06:42
iOS 安卓的SDK是用eclipse工具封装的jar包,供开发者调用就行了, 简单说就是把功能封装,提供方法给别人调用,然后别人不知道内部实现。