加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift网络数据请求方法

发布时间:2020-12-14 01:28:10 所属栏目:百科 来源:网络整理
导读:搭建一个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 [

搭建一个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请求方法:


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

POST请求方法:

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

第三方开源库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上的操作了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读