[Xcode 实际操作]八、网络与多线程-(9)使用异步Get方式获取网页源码
本文将演示如何通过Get请求方式,异步获取网页源码。
异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 //创建一个网址对象,指定请求网络数据的网址。 10 let url = URL(string: "https://www.cnblogs.com/strengthen/") 11 12 //创建一个网络请求对象,参数说明: 13 //1.代表请求访问的路径 14 //2.代表网络请求的缓存协议 15 //3.代表网络请求的超时时间 16 let request = URLRequest.init(url: url!, 17 cachePolicy: .useProtocolCachePolicy, 18 timeoutInterval: 30) 19 20 //网址会话URLSession在2013年发布,苹果对它的定位是作为旧的网络请求接口的替代者。 21 //这里获得网址会话的单例对象 22 let session = URLSession.shared 23 //所有网络请求工作,都是通过网址会话任务对象来完成的。 24 //可以使用闭包、代理或者两者混合的方式,来创建网络请求任务。 25 //创建一个网络请求任务,根据指定的网址请求对象,获取接口的内容, 26 //并在完成时通过闭包语句,处理服务器返回的数据 27 let task = session.dataTask(with: request, completionHandler: {(data, response, error) -> Void in 28 //如果出现网络请求错误, 29 if error != nil{ 30 //则在控制台打印输出错误代码和错误信息 31 print(error.debugDescription) 32 }else{ 33 //将网络返回的数据对象,根据指定的编码方式,转换为字符串 34 let result = String(data: data!, encoding: String.Encoding.utf8)、 35 //在控制台输出字符串的内容 36 print(result ?? "") 37 } 38 }) 39 40 //任务创建后,调用resume方法开始工作。 41 task.resume() 42 } 43 44 override func didReceiveMemoryWarning() { 45 super.didReceiveMemoryWarning() 46 // Dispose of any resources that can be recreated. 47 } 48 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)