美文网首页
2018-05-31 请求网络数据GET/POST

2018-05-31 请求网络数据GET/POST

作者: 深呼吸_a7ca | 来源:发表于2018-05-31 19:47 被阅读0次

NewsViewController 页面

import UIKit

let scrWidth = UIScreen.main.bounds.size.width  // 宽度

let scrHeight = UIScreen.main.bounds.size.height  // 高度

// 给UIViewController 类添加扩展

extension UIViewController {

    funcshowAlert(msg:String,sec:TimeInterval) {

        // 实例化弹出控制器

        letalertVC =UIAlertController(title:nil, message: msg, preferredStyle: .alert)

        // 从vc 控制器弹出提示控制器

        self.present(alertVC, animated:true, completion:nil)

        // 延时执行隐藏操作

        self.perform(#selector(hideAlertVC(sender:)), with: alertVC, afterDelay: sec)

    }

    @objcfunchideAlertVC(sender:UIAlertController)  {

        sender.dismiss(animated:true, completion:nil)

    }

}

class NewsViewController: UIViewController,UITextFieldDelegate {

    varnewsTF:UITextField?  // 菜谱输入框

    varsearchBtn:UIButton?  // 搜索按钮

    overridefuncviewDidLoad() {

        super.viewDidLoad()

        // 设置背景颜色

        self.view.backgroundColor = UIColor.white

        newsTF=UITextField(frame:CGRect(x:0, y:0, width:200, height:50))

        newsTF?.center=CGPoint(x:scrWidth/2, y:200)

        newsTF?.borderStyle= .line

        newsTF?.placeholder="请输入查询的新闻"

       newsTF?.textColor = UIColor.blue

        newsTF?.textAlignment= .center

        newsTF?.clearButtonMode = .whileEditing

        newsTF?.delegate=self

        self.view.addSubview(newsTF!)

        searchBtn=UIButton(frame:CGRect(x:0, y:0, width:100, height:50))

        searchBtn?.center=CGPoint(x:scrWidth/2, y:300)

        searchBtn?.setTitle("点击查询", for: .normal)

        searchBtn?.backgroundColor = UIColor.yellow

        searchBtn?.setTitleColor(UIColor.black, for: .normal)

        searchBtn?.addTarget(self, action:#selector(btnDidPress(sender:)), for: .touchUpInside)

        self.view.addSubview(searchBtn!)

    }

    @objcfuncbtnDidPress(sender:UIButton) {

        if(newsTF?.text?.isEmpty)! {

        self.showAlert(msg:"信息不可为空", sec:2.5)

        return

        }

        // 实例化控制器对象

        let resultVC = NewsResultViewController()

        // 传递数据

        resultVC.passString=newsTF!.text!

        self.navigationController?.pushViewController(resultVC, animated:true)

    }

    // MARK -----------UITextFiledDelegate -------

    // 点击return 隐藏键盘

    functextFieldShouldReturn(_textField:UITextField) ->Bool{

        // 放弃第一响应这

        textField.resignFirstResponder()

        return true

    }

    // ------ touches Method ------

    overridefunctouchesEnded(_touches:Set, with event:UIEvent?) {

        super.touchesEnded(touches, with: event)

        newsTF?.resignFirstResponder()

        self.view.endEditing(true)

    }

}

NewsResultViewController 页面

import UIKit

class NewsResultViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {

    vartable:UITableView?

    vartableData:[News]?

    varpassString:String=""

    overridefuncviewDidLoad() {

        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white

        self.navigationItem.title = "\"\(passString)\"的搜索结果"

        table=UITableView(frame:CGRect(x:0, y:0, width:scrWidth, height:scrHeight),style: .plain)

        table?.rowHeight=260.0

        table?.delegate=self

        table?.dataSource=self

        self.view.addSubview(table!)

    }

    overridefuncviewWillAppear(_animated:Bool) {

        // 请求网络数据

        leturlSer =URLService()

        urlSer.getNewsBySearch(search:self.passString, vc:self) { (data, success)in

            if!success {

                return

            }

            print(data)

            self.tableData= dataas? [News]

            DispatchQueue.main.async {

                self.table?.reloadData()

            }

        }

    }

    functableView(_tableView:UITableView, numberOfRowsInSection section:Int) ->Int{

        ifletcount =tableData?.count{

            returncount

        }

        return0

    }

    functableView(_tableView:UITableView, cellForRowAt indexPath:IndexPath) ->UITableViewCell{

        letidentifier ="cell"

        varcell = tableView.dequeueReusableCell(withIdentifier: identifier)

        ifcell ==nil{

            cell =UITableViewCell.init(style: .value1, reuseIdentifier: identifier)

            letlab =UILabel(frame:CGRect(x:0, y:0, width:scrWidth, height:30))

            cell?.addSubview(lab)

            letlab2 =UILabel(frame:CGRect(x:0, y:40, width:scrWidth, height:30))

            cell?.addSubview(lab2)

            letlab3 =UILabel(frame:CGRect(x:0, y:80, width:scrWidth, height:80))

            lab3.numberOfLines=2

            cell?.addSubview(lab3)

            letone =self.tableData![indexPath.row]as?News

            lab.text= one?.city

            lab2.text= one?.address

            lab3.text= one?.content

        }

        returncell!

    }

}

Model类:

创建一些属性:比如

import UIKit

classNews:NSObject{

    varprovince:String?

    vartown:String?

    varcity:String?

    varaddress:String?

    varnum:Int?

    varcontent:String?

}

URLSeivice类:

import UIKit

classURLService:NSObject{

    // 请求搜索的数据

    funcgetNewsBySearch(search:String,vc:UIViewController,completion:@escaping(Any,Bool) ->Void) {

        // 判断无网状态

        if Reachability.forLocalWiFi().currentReachabilityStatus() == NotReachable && Reachability.forInternetConnection().currentReachabilityStatus() == NotReachable  {

            vc.showAlert(msg:"网络错误,请检查网络", sec:2.5)

            completion("error",false)

            return

        }

        // (2) 状态栏中的菊花开始转

        UIApplication.shared.isNetworkActivityIndicatorVisible = true

        // (3) 网址字符串封装

        let url = URL.init(string: "http://api.jisuapi.com/illegaladdr/city")

        // 创建请求对象

        varreq =URLRequest.init(url: url!, cachePolicy: .reloadIgnoringCacheData, timeoutInterval:15.0)

        // 设置请求方式为POST

        req.httpMethod="POST"

        // 将所有的参数拼接成一个字符串

        let str = "city=\(search)&num=10&appkey=de394933e1a3e2db"

        // 设置请求对象的请求体

        req.httpBody= str.data(using: .utf8)

        //(5) 会话对象请求网络数据

        URLSession.shared.dataTask(with: req) { (data:Data?, success:URLResponse?, error:Error?)in

            // 回到UI主线程停止菊花

            DispatchQueue.main.async {

                UIApplication.shared.isNetworkActivityIndicatorVisible = false

            }

            // 如果服务器连接失败

            iferror !=  nil{

                DispatchQueue.main.async{

                    vc.showAlert(msg:"服务器连接失败", sec:2.5)

                }

                return

            }

            // JSON解析

            letjsonData =try?JSONSerialization.jsonObject(with: data!, options: .allowFragments)

            ifjsonData ==nil{

                DispatchQueue.main.async{

                    vc.showAlert(msg:"网络数据错误", sec:2.5)

                }

                return

            }

            // 如果正确将json解析数据回传个controller

            letjsonDic = jsonDataas!NSDictionary

            letstatus = jsonDic.value(forKeyPath:"status")as!NSString

            letmsg = jsonDic.value(forKeyPath:"msg")as!String

            ifstatus.intValue!=0{

                DispatchQueue.main.async{

                    vc.showAlert(msg: msg, sec:2.5)

                }

                return

            }

            // 得到json数据中result字段对应的字典

            letresultDic = jsonDic.value(forKeyPath:"result")as!NSArray

            // Model封装

            varmodelArr:[News] = []

            // 遍历数组中的每个字典

            foriteminresultDic {

                letitemDic = itemas!NSDictionary

                letone =News()

                one.province= itemDic.value(forKey:"province")as?String

                one.city= itemDic.value(forKey:"city")as?String

                one.town= itemDic.value(forKey:"town")as?String

                one.address= itemDic.value(forKey:"address")as?String

                one.num= itemDic.value(forKey:"num")as?Int

                one.content= itemDic.value(forKey:"content")as?String

                modelArr.append(one)

            }

            completion(modelArr,true)

        }.resume()

    }

}

相关文章

  • iOS之网络简解篇.

    网络 HTTP请求 GET请求 POST请求 数据解析 JSONNSJSONSerialization XMLSA...

  • GET和POST

    GET和POST请求的区别 GET请求 POST请求 提交 GET提交,请求的数据会附在URL之后(就是把数据放置...

  • 网络编程数据处理

    下载:如何请求数据网络?网络通信,发送请求有两种方式,GET和POST;HttpURLConnection的GET...

  • iOS 网络缓存

    常见的网络数据缓存方式 GET网络请求缓存 概述 首先要知道,POST请求不能被缓存,只有 GET 请求能被缓存。...

  • 2018-05-31 请求网络数据GET/POST

    NewsViewController 页面 import UIKit let scrWidth = UIScree...

  • gf框架 ghttp使用

    案例中包含以下内容 get请求 get请求携带参数 post请求携带参数 post请求发送xml数据 post请求...

  • 网络协议

    网络请求分为4类:GET同步请求GET异步请求POST同步请求POST异步请求 同步网络请求步骤: 1:创建网址字...

  • Python 网络工具包 - requests

    安装与加载 网络请求 - Request GET 请求 POST 请求 - form-data POST 请求 -...

  • ajax 请求的时候 get 和 post 方式的区别?

    get和post的区别 get请求不安全,post安全 get请求数据有限制,post无限制 get请求参数会在u...

  • curl相关操作

    GET请求 POST请求 POST请求,提交json格式数据 curl 的使用

网友评论

      本文标题:2018-05-31 请求网络数据GET/POST

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