Swift中的HTTP請求

iOS開發中大部分App的網絡數據交換是基於HTTP協議的。本文將簡單介紹在Swift中使用HTTP進行網絡請求的幾種方法。php

注意:網絡請求完成後會得到一個NSData類型的返回數據,若是數據格式爲JSON,那麼能夠使用系統自帶的NSJSONSerialization類來解析數據;或者使用SwiftyJSON庫的使用和思考一文中提到的JSON解析庫來解析數據。json

  1. 使用NSURLConnection 下面例子使用NSURLConnection實現了一個簡單的異步GET操做:swift

     

func requestUrl(urlString: String){ var url: NSURL = NSURL(string: urlString) let request: NSURLRequest = NSURLRequest(URL: url)api

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{
        (response, data, error) -> Void in

            if error? {
                //Handle Error here
            }else{
                //Handle data in NSData type
            }

        })
}
2. 使用YYHRequest-Swift庫
這個庫經過封裝NSURLConnection和NSOperationQueue實現了簡單的HTTP GET/POST/PUT/DELETE操做:

let request = YYHRequest(url: NSURL(string: "http://www.google.com/"))網絡

request.loadWithCompletion { response, data, error in // request complete! }異步

3. 使用SwiftHTTP庫。
這個庫經過封裝NSURLSession,提供了GET/POST/PUT/DELETE以及上傳和下載的支持,比較全面:

var request = HTTPTask() request.GET("http://vluxe.io", parameters: nil, success: {(response: AnyObject?) -> Void ingoogle

},failure: {(error: NSError) -> Void in

})
4. 使用Objective-C中的AFNetworking網絡庫
AFNetworking庫是在iOS開發領域頗負盛名、功能強大的網絡請求庫。

首先將AFNetworking庫引入工程,請參考這篇教程
而後在<ProjectName>-Bridging-Header.h頭文件中引入AFNetworking:
#import 「AFNetworking/AFNetworking.h」
下面簡單展現了AFNetworking中GET的用法:

func requestUrl(urlString: String) { let manager = AFHTTPRequestOperationManager()url

let params = ["a":1, "b":2]

    manager.GET(urlString,
        parameters: params,
        success: { (operation: AFHTTPRequestOperation!,
            responseObject: AnyObject!) in

            let responseDict = responseObject as NSDictionary!

        },
        failure: { (operation: AFHTTPRequestOperation!,
            error: NSError!) in
            //Handle Error
        })
}
實例
最後,我寫了一個簡單的例子來經過調用金山詞霸的API獲取單詞swift的解釋。項目使用SwiftHTTP來做網絡請求,使用SwiftyJSON來解析JSON數據,代碼託管在Github,核心代碼以下:

        //請求金山詞霸API獲取單詞`swift`的解釋

var request = HTTPTask() var params: Dictionary<String, AnyObject> = ["w": "swift", "key": "30CBA9DDD34B16DB669A9B214C941F14", "type": "json"] request.GET("http://dict-co.iciba.com/api/dictionary.php", parameters: params, success: {(response: AnyObject?) -> Void incode

let json = JSONValue(response!)
            println("\(json)")

        },failure: {(error: NSError) -> Void in

            println("\(error)")
        })
相關文章
相關標籤/搜索