[Xcode 实际操作]八、网络与多线程-(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 }