zoukankan      html  css  js  c++  java
  • 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上的操作了

     
     
  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/JimmyBright/p/4455480.html
Copyright © 2011-2022 走看看