[Xcode 實際操做]8、網絡與多線程-(14)使用網址會話對象URLSession將地理座標轉換爲地名

目錄:[Swift]Xcode實際操做html

本文將演示若是經過網址會話對象,將地理座標轉換爲地名。swift

網址會話對象URLSession具備在後臺上傳和下載、暫停和恢復網絡操做、豐富的代理模式等優勢。服務器

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】網絡

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4     
 5     //給當前視圖控制器類,添加一個標籤屬性。
 6     //該標籤對象,將用來顯示遠程服務器返回的信息
 7     var label = UILabel()
 8     
 9     override func viewDidLoad() {
10         super.viewDidLoad()
11         // Do any additional setup after loading the view, typically from a nib.
12         
13         //設置標籤對象的位置在(20,40),尺寸爲(280,500)
14         label.frame = CGRect(x: 20, y: 40, width: 280, height: 500)
15         //設置標籤對象的文字內容
16         label.text = "Loading..."
17         //設置標籤對象的字體和大小
18         label.font = UIFont(name: "Arial", size: 14)
19         //設置標籤對象的背景顏色爲淺灰色
20         label.backgroundColor = UIColor.lightGray
21         //設置標籤對象的行數屬性值爲0,表示不限制標籤對象的行數
22         label.numberOfLines = 0
23         //遠程服務器有可能返回較多的文字內容,
24         //在此設置標籤對象在進行換行時,保留全部的字符
25         label.lineBreakMode = NSLineBreakMode.byWordWrapping
26         //將設置好的標籤對象,添加到當前視圖控制器的根視圖
27         self.view.addSubview(label)
28         
29         //建立一個網址對象,指定請求網絡數據的網址。
30         //網址最後面的參數,表明須要解析地理位置的城市
31         let urlString:String = "http://gc.ditu.aliyun.com/regeocoding?l=39.9385449,116.1165784&type=010";
32         //將字符串轉換成網址對象
33         let url:URL! = URL(string:urlString)
34         
35         //建立一個網絡請求對象
36         let request:URLRequest = URLRequest(url: url)
37         //網址會話URLSession在2013年發佈,蘋果對它的定位是做爲舊的網絡請求接口的替代者。
38         //這裏得到網址會話的單例對象
39         let session = URLSession.shared
40         
41         //全部網絡請求工做,都是經過網址會話任務對象來完成的。
42         //能夠使用閉包、代理或者二者混合的方式,來建立網絡請求任務。
43         let dataTask = session.dataTask(with: request, completionHandler: {(data, response, error) -> Void in
44             //若是出現網絡請求錯誤,
45             if let error = error
46             {
47                 //則在控制檯打印輸出錯誤代碼和錯誤信息
48                 print(error.localizedDescription)
49             }
50             else
51             {
52                  //添加一個閉包語句,返回應用的主線程
53                 DispatchQueue.main.async {
54                     //將網絡返回的數據對象,根據指定的編碼方式,轉換爲字符串
55                     let str = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
56                     //而後在主線程裏更新標籤對象的文字內容
57                     self.label.text = str! as String
58                 }
59             }
60         })
61         
62         //任務建立後,調用resume方法開始工做。
63         dataTask.resume()
64     }
65     
66     override func didReceiveMemoryWarning() {
67         super.didReceiveMemoryWarning()
68         // Dispose of any resources that can be recreated.
69     }
70 }
相關文章
相關標籤/搜索