1. 程式人生 > >[Xcode10 實際操作]八、網路與多執行緒-(14)使用網址會話物件URLSession將地理座標轉換為地名

[Xcode10 實際操作]八、網路與多執行緒-(14)使用網址會話物件URLSession將地理座標轉換為地名

本文將演示如果通過網址會話物件,將地理座標轉換為地名。

網址會話物件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 }