• [Xcode 实际操作]八、网络与多线程-(10)使用异步Get方式查询GitHub数据


     目录:[Swift]Xcode实际操作

    本文将演示如何通过Get请求方式,异步获取GitHub资源的详细信息。

    异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程。

    在项目导航区,打开视图控制器的代码文件【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: 12)
    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         let url = URL(string: "https://api.github.com/repos/tulios/json-viewer")
    31         
    32         //创建一个网络请求对象,参数说明:
    33         //1.代表请求访问的路径
    34         //2.代表网络请求的缓存协议
    35         //3.代表网络请求的超时时间
    36         let request = URLRequest.init(url: url!,
    37         cachePolicy: .useProtocolCachePolicy,
    38         timeoutInterval: 30)
    39         
    40         //网址会话URLSession在2013年发布,苹果对它的定位是作为旧的网络请求接口的替代者。
    41         //这里获得网址会话的单例对象
    42         let session = URLSession.shared
    43         //所有网络请求工作,都是通过网址会话任务对象来完成的。
    44         //可以使用闭包、代理或者两者混合的方式,来创建网络请求任务。
    45         //创建一个网络请求任务,根据指定的网址请求对象,获取接口的内容,
    46         //并在完成时通过闭包语句,处理服务器返回的数据
    47         let task = session.dataTask(with: request, completionHandler: {(data, response, error) -> Void in
    48             //如果出现网络请求错误,
    49             if error != nil{
    50                 //则在控制台打印输出错误代码和错误信息
    51                 print(error.debugDescription)
    52             }else{
    53                 //将网络返回的数据对象,根据指定的编码方式,转换为字符串
    54                 let result = String(data: data!, encoding: String.Encoding.utf8)
    55                 //当在一个线程中,需要更改界面元素时,需要返回程序的主线程
    56                 DispatchQueue.main.async(execute: { () -> Void in
    57                     //更新标签对象的文字内容
    58                     self.label.text = result! as String
    59                 })
    60             }
    61         })
    62         
    63         //任务创建后,调用resume方法开始工作。
    64         task.resume()        
    65     }
    66     
    67     override func didReceiveMemoryWarning() {
    68         super.didReceiveMemoryWarning()
    69         // Dispose of any resources that can be recreated.
    70     }
    71 }
  • 相关阅读:
    37. VUE — webpack 基本使用
    36.VUE — 认识 Webpack 和 安装
    4. SpringBoot配置文件—YAML语法讲解
    3. IDEA 快速创建SpringBoot程序
    6. Maven 添加 镜像一些特性
    35. JS 模块化开发
    2. SPringBoot 解析HelloWorld 程序
    1. Maven 创建 SpringBoot项目 — HelloWorld — 我是踩了非常多的坑! 才写出来的 开学不顺 但是收获很多!!!
    34. VUE 的 编译作用域 以及 slot作用域插槽(获取组件作用域中的数据)
    【洛谷 3366】最小生成树_Kruskal
  • 原文地址:https://www.cnblogs.com/strengthen/p/10060617.html
Copyright © 2020-2023  润新知