博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift网络数据请求方法
阅读量:7124 次
发布时间:2019-06-28

本文共 2380 字,大约阅读时间需要 7 分钟。

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

1 
$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 in3             if let d = data{4                 var getMsg = NSString(data: d, encoding: NSUTF8StringEncoding)! as String5                 dispatch_async(dispatch_get_main_queue(), { () -> Void in6                     self.label.text = getMsg7                 })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 in2 //            println(req.URLString)3 //            println(json?.valueForKey("result"))4             self.label.text = json?.valueForKey("result") as? String5             6         }

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

 

 
 

转载于:https://www.cnblogs.com/JimmyBright/p/4455480.html

你可能感兴趣的文章
Servlet总结
查看>>
c++调用java时得到java签名的方法javap -s -p <classname>
查看>>
Linux下查看apache连接数
查看>>
HDU 3660 Alice and Bob's Trip
查看>>
android 获取手机中所有的传感器Sensor类使用方法
查看>>
JavaScript基础 ( 3 章 )
查看>>
HTML5标签
查看>>
在移位数组中查找数
查看>>
GNU make manual 翻译(九十九)
查看>>
c/c++:关于typedef的用法总结
查看>>
泛型和反射
查看>>
HDU 4285 circuits 第37届ACM/ICPC天津赛区网络赛(插头DP)
查看>>
UIlabel 最小字体设置。
查看>>
HUST 1017 Exact cover 跳舞链(DLX) 模板题目
查看>>
[原]Node.js小试
查看>>
第44周星期四小结
查看>>
Android : 自己写个HTTP框架
查看>>
Little Tips
查看>>
FPGA学习手记(二) 简单功能仿真及Verilog基础电路设计
查看>>
linux 自学系列:文件\文件夹复制
查看>>