• swift网络数据请求方法


    搭建一个apache服务器,用php编写一个返回给客户端请求数据的脚本

     1 <?php
     2     // header("Content-type:text/html;charset=utf-8");
     3     header("Content-type:text/json;charset=utf-8");
     4     if (isset($_REQUEST['name'])) {
     5         $result = $_REQUEST['name'];
     6         $arr=array("result"=>$result);
     7         $json=json_encode($arr);
     8         echo $json;
     9     }
    10 ?>

     该php实现了接收一个客户端的远程post或者get请求,然后返回给其一个简单的json字串,

    打开Xcode创建一个singleView工程,在IB中添加一个button和一个label并连线到代码中的outlet,我的测试php文件的地址为:

    let url = "http://192.168.1.106/apprequesttest/index.php"

    下面开始描述两种实现网络请求的方法,在button的action事件中添加网络请求

    IOS SDK自带的网络请求方法:

    GET请求方法:

    1         var msg = "jimmy"
    2         NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: NSURL(string: "(url)?name=(msg)")!), queue: NSOperationQueue()) {       (res:NSURLResponse!, data:NSData!, error:NSError!) -> Void in
    3             if let d = data{
    4                 var getMsg = NSString(data: d, encoding: NSUTF8StringEncoding)! as String
    5                 dispatch_async(dispatch_get_main_queue(), { () -> Void in
    6                     self.label.text = getMsg
    7                 })
    8             }
    9         }

    POST请求方法:

     1         var req = NSMutableURLRequest(URL: NSURL(string: url)!)
     2         req.HTTPMethod = "POST"
     3         req.HTTPBody = NSString(string: "name=jimmy").dataUsingEncoding(NSUTF8StringEncoding)
     4         NSURLConnection.sendAsynchronousRequest(req, queue: NSOperationQueue()) { (_, data, _)-> Void in
     5             if let d = data{
     6                  var postMsg = NSString(data: d, encoding: NSUTF8StringEncoding)
     7                 dispatch_async(dispatch_get_main_queue(), { () -> Void in
     8                   self.label.text = postMsg! as String
     9                 })
    10             }
    11         }

    第三方开源库Alamofire:

    Alamofire是swift网络编程中替代AFNetworking的第三方开源库,作者为同一人,使用Alamofire需要在github上下载该库,然后将其引入到工程中,如下图示:

    将解压包中的Alamofire.xcodeproj拖拽到项目名下

    在Embedded Binaries中添加上面红色箭头的尾部的framework,注意不要添加下面的framework,虽然二者名字一样,但是上面的是ios的库,下面的是osX的库,点击add按钮,运行程序,确保编译成功。

    在我们的工程文件里面饮入Alamofire便可以使用它了

    1         Alamofire.request(.POST, url, parameters: ["name":"jimmy"]).responseJSON(options: NSJSONReadingOptions.AllowFragments) { (req, _, json, _) -> Void in
    2 //            println(req.URLString)
    3 //            println(json?.valueForKey("result"))
    4             self.label.text = json?.valueForKey("result") as? String
    5             
    6         }

    通过Alamofire可以只需要几行代码就完成网络数据的请求,上面的的parameters是给php发了一个post请求,请求名称是name,值为“jimmy”,这样label上就会快速的显示返回的json数据,由于alamofire本就是异步请求,所以不必像第一种方法那样在更新UI的时候,还要跳到主线程,在Alamofire中,请求只要返回正确,便可以在必包函数中任意的做UI上的操作了

     
     
  • 相关阅读:
    Golden Tiger Claw (KM算法)
    Xor Sum题解>----(思维+递归)
    Mister B and PR Shifts(思维)
    Traffic Real Time Query System-(点双缩点+LCA)
    最大的位或----(极简代码)
    萌萌哒题解_倍增并查集
    连续攻击游戏(递增1)题解------(并查集)
    道路与航线 (连通块Dijkstra+拓扑序||spfa+slf优化)
    美团校招-表达式求值
    天猫前端电话面试
  • 原文地址:https://www.cnblogs.com/JimmyBright/p/4455480.html
Copyright © 2020-2023  润新知