[Swift A] - HTTP請求


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

注意:網絡請求完成后會獲得一個NSData類型的返回數據,如果數據格式為JSON,那么可以使用系統自帶的NSJSONSerialization類來解析數據;或者使用SwiftyJSON庫的使用和思考一文中提到的JSON解析庫來解析數據。

1. 使用NSURLConnection

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

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

        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

這個庫通過封裝NSURLConnectionNSOperationQueue實現了簡單的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 in

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

    })

4. 使用Objective-C中的AFNetworking網絡庫

AFNetworking庫是在iOS開發領域享有盛名、功能強大的網絡請求庫。

  • 首先將AFNetworking庫引入工程,請參考這篇教程
  • 然后在<ProjectName>-Bridging-Header.h頭文件中引入AFNetworking:
    #import “AFNetworking/AFNetworking.h”

    下面簡單展示了AFNetworkingGET的用法:

    func requestUrl(urlString: String) {
            let manager = AFHTTPRequestOperationManager()
    
            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 in
    
                    let json = JSONValue(response!)
                    println("\(json)")
    
                },failure: {(error: NSError) -> Void in
    
                    println("\(error)")
                })

    from:http://swiftist.org/topics/135


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM