首先是创建桥接文件
简单的方式就是在Swift工程中创建OC文件.系统会提示你创建桥接文件的
倒入第三方AFNetworking文件
在桥接文件中倒入头文件 #import "AFNetworking.h"
然后对AFNetworking的简单封装
//import AFNetworking
/** 请求类型枚举 */
enum RequestType : String {
case GET = "GET"
case POST = "POST"
}
// MARK:- 创建网络请求工具类的单例对象
class PDNetworkTools: AFHTTPSessionManager {
/** let本身就时线程安全的.在多个线程中能保证只创建一次 */
static let sharedInstance : PDNetworkTools = {
let instence = PDNetworkTools()
/** 设置数据内容样式(在集合内插入新的数据格式) */
instence.responseSerializer.acceptableContentTypes?.insert("text/html")
instence.responseSerializer.acceptableContentTypes?.insert("text/plain")
return instence
}()
}
// MARK:- 封装GET和POST请求
extension PDNetworkTools {
/** 参数名称
参数progress./下载进度
参数task./任务对象
参数request./请求得到数据
参数error./如果下载失败的错误信息 */
/** 封装的请求方法,外界调用通过闭包得到结果 */
func request(_ requestType : RequestType, urlString : String, parameters : [String : Any], finished : @escaping (Any?, Error?) -> ()) {
/** 下载进度progressCallBack */
let progressCallBack : ((Progress) -> Void)? = { (progress) in
/** 下载进度 */
}
/** 成功successCallBack */
let successCallBack : ((URLSessionDataTask, Any?) -> Void)? = { (task, request) in
/** 下载成功 */
finished(request, nil)
}
/** 失败failureCallBack */
let failureCallBack : ((URLSessionDataTask?, Error) -> Void)? = { (task, error) in
/** 请求失败 */
finished(nil, error)
}
/** 判断请求类型 */
if requestType == .GET {
/** 发送GET请求 */
get(urlString, parameters: parameters, progress: progressCallBack, success: successCallBack, failure: failureCallBack)
} else {
/** 发送POST请求 */
post(urlString, parameters: parameters, progress: progressCallBack, success: successCallBack, failure: failureCallBack)
}
}
}
接下来就是在需要请求数据的地方调用封装好的请求方法
参数
1./请求的方式, GET 或者 POST (枚举类型直接用点语法就可以)
2./网址字符串
3./请求的参数
4./请求结束回调, (闭包内的参数 1./ 请求到的数据 2./错误信息)
PDNetworkTools.sharedInstance.request(<#T##requestType: RequestType##RequestType#>, urlString: <#T##String#>, parameters: <#T##[String : Any]#>, finished: <#T##(Any?, Error?) -> ()#>)
下面是请求的示例
//网址字符串
let urlString = "http://api.jisuapi.com/news/get"
//请求的参数
let par : [String : Any] = [
"channel" : "头条",
"start" : 0,
"num" : 10,
"appkey" : "de394933e1a3e2db"
]
//调用封装好的请求方法
PDNetworkTools.sharedInstance.request(.GET, urlString: urlString, parameters: par) { (result, error) in
//错误校验
guard error == nil else {
return
}
guard let jsonDict = result else {
return
}
//拆分数据
let dict = jsonDict as! NSDictionary
let resultDict = dict.value(forKey: "result") as! NSDictionary
let listArray = resultDict.value(forKey: "list") as! NSArray
for item in listArray{
//通过数据模型的构造方法快速字典转模型
let model = Model(dict: item as! [String : Any])
self.dataSource.append(model)
}
//刷新表格展示数据
self.mainTableView.reloadData()
}
数据模型
import UIKit
class Model: NSObject {
@objc var title : String?
@objc var content : String?
init(dict : [String : Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
}
网友评论