目录:[Swift]Xcode实际操做html
本文将演示如何经过Get请求方式,异步获取GitHub资源的详细信息。ios
异步请求与同步请求相比,不会阻塞程序的主线程,而会创建一个新的线程。git
在项目导航区,打开视图控制器的代码文件【ViewController.swift】github
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: 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 }