[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 }
相关文章
相关标签/搜索