zoukankan      html  css  js  c++  java
  • [Xcode 实际操作]八、网络与多线程-(14)使用网址会话对象URLSession将地理坐标转换为地名

    目录:[Swift]Xcode实际操作

    本文将演示如果通过网址会话对象,将地理坐标转换为地名。

    网址会话对象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,  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 }
  • 相关阅读:
    Chapter1-data access reloaded:Entity Framework(上)
    Part1-Redefining your data-access strategy 重新定义你的数据访问策略
    ora-12541无监听的一种场景
    GridView根据一列自动计算(转载)
    百度Fex webuploader.js上传大文件失败
    JS文件中引用另一个JS文件
    连接虚拟机的SQLServer
    Spring中Bean的生命周期
    Spring中Bean的作用范围调整
    Spring中三种创建Bean对象的方式
  • 原文地址:https://www.cnblogs.com/strengthen/p/10060997.html
Copyright © 2011-2022 走看看