美文网首页
iOS Swift4.0AFNetWoring

iOS Swift4.0AFNetWoring

作者: rainbow_H | 来源:发表于2018-08-25 07:56 被阅读0次

    在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)

            }

        }

    }

    相关文章

      网友评论

          本文标题:iOS Swift4.0AFNetWoring

          本文链接:https://www.haomeiwen.com/subject/prywiftx.html