原創|行業資訊|編輯:郝浩|2015-02-27 14:47:19.000|閱讀 2860 次
概述:本文通過實例從同步和異步兩種方式上回答了”如何在Swift語言中創建http請求“的問題。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
如果你對Objective-C比較了解的話,對于如何創建http請求你一定駕輕就熟了,而新語言Swift與其相比只有語法上的區別。但是,對才接觸到這個嶄新平臺的初學者來說,他們仍然想知道“如何在Swift語言中創建http請求?”。
在這里,我將作出一些建議來回答上述問題。常見的創建http請求的方式主要有兩種:同步和異步。在這里,我們將對這兩種方式作一一討論。
在objective C,可以使用NSURL、NSURLRequest和NSURLConnection來創建http請求,而在Swift,它們同樣的適用。讓我們從同步調用開始吧。
var urlString = "//api.shephertz.com" // Your Normal URL String var url = NSURL.URLWithString(urlString)// Creating URL var request = NSURLRequest(URL: url) // Creating Http Request var response:AutoreleasingUnsafePointer<NSURLResponse?> = nil; var error: AutoreleasingUnsafePointer<NSErrorPointer?> = nil; // Sending Synchronous request using NSURLConnection var responseData = NSURLConnection.sendSynchronousRequest(request,returningResponse: response, error:nil) as NSData if error != nil { // You can handle error response here } else { //Converting data to String var responseStr:NSString = NSString(data:responseData, encoding:NSUTF8StringEncoding) }
如果響應的是JSON格式,你可以直接把它解析到NSArray / NSDictionary格式:
var responseDict: NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData,options: NSJSONReadingOptions.MutableContainers, error:nil) as NSDictionary
異步調用可以使用委托模式或者使用objective-c中的completion handler。
var urlString = "//api.shephertz.com" // Your Normal URL String var url = NSURL.URLWithString(urlString)// Creating URL var request = NSURLRequest(URL: url)// Creating Http Request // Creating NSOperationQueue to which the handler block is dispatched when the request completes or failed var queue: NSOperationQueue = NSOperationQueue() // Sending Asynchronous request using NSURLConnection NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{(response:NSURLResponse!, responseData:NSData!, error: NSError!) ->Void in if error != nil { println(error.description) self.removeActivityIndicator() } else { //Converting data to String var responseStr:NSString = NSString(data:responseData, encoding:NSUTF8StringEncoding) } })
var urlString = "//api.shephertz.com" // Your Normal URL String var url = NSURL.URLWithString(urlString)// Creating URL var request = NSURLRequest(URL: url)// Creating Http Request //Making request var connection = NSURLConnection(request: request, delegate: self, startImmediately: true)
在這里,如果要讓connection一開始就立刻加載數據,可把startImmediately的值設定為true,否則就設定為false。如果你使用的是false,則connection將會被設定為不在run loop下運行。你可以在之后通過調用scheduleInRunLoop(_aRunLoop:!,forMode mode:!)來將connection設定為進入run loop運行和你所選擇的模式。
現在你可以創建請求,但是你需要定義在這種情況下的作為響應的委托。
在上面的代碼中,我們傳遞委托來作為self,因此包含的類應當與NSURLConnectionDataDelegate一致,并且類中也應當定義以下委托函數:
func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) { //It says the response started coming NSLog("didReceiveResponse") }
你還應當定義一個全局的NSMutableData變量:
var data = NSMutableData()
這里還有一種可能性是數據可能以塊的形式存在。如果數據是以分批的形式接受到的,那么以下的委托函數將會把這些數據收集成塊并添加到已定義的全局數據變量。
func connection(connection: NSURLConnection!, didReceiveData _data: NSData!) { //This will be called again and again until you get the full response NSLog("didReceiveData") // Appending data self.data.appendData(_data) } func connectionDidFinishLoading(connection: NSURLConnection!) { // This will be called when the data loading is finished i.e. there is no data left to be received and now you can process the data. NSLog("connectionDidFinishLoading") var responseStr:NSString = NSString(data:self.data, encoding:NSUTF8StringEncoding) }
本文作者將整個代碼封裝在了一個示例項目里,你可以在上進行下載。
本文翻譯自 ,原作者 ,譯者 回憶和感動,轉載請注明 文章轉載自慧都控件網
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn