swift網路資料請求方法

流火行者發表於2015-04-25

搭建一個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上的操作了

 

 
 

相關文章