標籤:
搭建一個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 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上的操作了
swift網路資料要求方法