在View Controller中
/** 模型数据源 */
vardataSource : [Model] = [Model]()
/** 控件拖线属性 */
@IBOutletweakvarmainTableView:UITableView!
overridefuncviewDidLoad() {
super.viewDidLoad()
mainTableView.rowHeight = 100
let urlString = "http://api.jisuapi.com/news/get"
letpar : [String:Any] = [
"":"",
"":0,
"":10,
"" : ""
]
NetworkTools.sharedInstance.request(.GET, urlString: urlString, parameters: par) { (result, error)in
guarderror ==nilelse{
return
}
guardletjsonDict = resultelse{
return
}
letdict = jsonDictas!NSDictionary
letresultDict = dict.value(forKey:"result")as!NSDictionary
letlistArray = resultDict.value(forKey:"list")as!NSArray
foritemin listArray{
letmodel =Model(dict: itemas! [String:Any])
self.dataSource.append(model)
}
self.mainTableView.reloadData()
}
}
// MARK:- 协议
extension ViewController : UITableViewDataSource {
functableView(_tableView:UITableView, numberOfRowsInSection section:Int) ->Int{
return dataSource.count
}
functableView(_tableView:UITableView, cellForRowAt indexPath:IndexPath) ->UITableViewCell{
letcell = tableView.dequeueReusableCell(withIdentifier:"cell")
cell?.textLabel?.text=dataSource[indexPath.row].title
cell?.detailTextLabel?.text=dataSource[indexPath.row].content
cell?.detailTextLabel?.numberOfLines = 2
returncell!
}
/** 请求类型枚举 */
enumRequestType :String{
caseGET ="GET"
casePOST ="POST"
}
// MARK:- 创建网络请求工具类的单例对象
class NetworkTools: AFHTTPSessionManager {
/** let本身就时线程安全的.在多个线程中能保证只创建一次 */
staticletsharedInstance :PDNetworkTools= {
letinstence =PDNetworkTools()
/** 设置数据内容样式(在集合内插入新的数据格式) */
instence.responseSerializer.acceptableContentTypes?.insert("text/html")
instence.responseSerializer.acceptableContentTypes?.insert("text/plain")
returninstence
}()
}
// MARK:- 封装GET和POST请求
extension PDNetworkTools {
/** 参数名称
参数progress./下载进度
参数task./任务对象
参数request./请求得到数据
参数error./如果下载失败的错误信息 */
/** 封装的请求方法,外界调用通过闭包得到结果 */
funcrequest(_requestType :RequestType, urlString :String, parameters : [String:Any], finished :@escaping(Any?,Error?) -> ()) {
/** 下载进度progressCallBack */
letprogressCallBack : ((Progress) ->Void)? = { (progress)in
/** 下载进度 */
}
/** 成功successCallBack */
letsuccessCallBack : ((URLSessionDataTask,Any?) ->Void)? = { (task, request) in
/** 下载成功 */
finished(request,nil)
}
/** 失败failureCallBack */
let failureCallBack : ((URLSessionDataTask?,Error) ->Void)? = { (task, error)in
/** 请求失败 */
finished(nil, error)
}
/** 判断请求类型 */
ifrequestType == .GET{
/** 发送GET请求 */
get(urlString, parameters: parameters, progress: progressCallBack, success: successCallBack, failure: failureCallBack)
}else{
/** 发送POST请求 */
post(urlString, parameters: parameters, progress: progressCallBack, success: successCallBack, failure: failureCallBack)
}
}
}
网友评论