- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
如何在Swift?中使用?async?let?并发运行后台任务
目录前言长期运行的任务阻塞了UI使用async/await在后台执行任务在后台执行多个任务使用asynclet下载多个文件结论
前言
Async/await语法是在Swift5.5引入的,在WWDC2025中的Meetasync/awaitinSwift对齐进行了介绍。它是编写异步代码的一种更可读的方式,比调度队列和回调函数更容易理解。Async/await语法与其他编程语言(如C#或JavaScript)中使用的语法类似。使用asynclet是为了并行的运行多个后台任务,并等待它们的综合结果。
Swift异步编程是一种编写允许某些任务并发运行而不是按顺序运行的代码的方法。这可以提高应用程序的性能,允许它同时执行多个任务,但更重要的是,它可以用来确保用户界面对用户输入的响应,同时任务在后台线程上执行。
长期运行的任务阻塞了UI
在一个同步的程序中,代码以线性的、从上到下的方式运行。程序等待当前任务完成后再进入下一任务。这在用户界面(UI)方面会产生问题,因为如果一个长期运行的任务被同步执行,程序就会阻塞,UI就会变得没有反应,直到任务完成。
下面的代码模拟了一个长期运行的任务,如以同步方式下载一个文件,其结果是UI变得没有反应,直到任务完成。这样的用户体验是不可接受的。
Model:
structDataFile:Identifiable,Equatable{
varid:Int
varfileSize:Int
vardownloadedSize=0
varisDownloading=false
init(id:Int,fileSize:Int){
self.id=id
self.fileSize=fileSize
varprogress:Double{
returnDouble(self.downloadedSize)/Double(self.fileSize)
mutatingfuncincrement(){
ifdownloadedSizefileSize{
downloadedSize+=1
}
ViewModel:
classDataFileViewModel:ObservableObject{
@Publishedprivate(set)varfile:DataFile
init(){
self.file=DataFile(id:1,fileSize:10)
funcdownloadFile(){
file.isDownloading=true
for_in0..file.fileSize{
file.increment()
usleep(300000)
file.isDownloading=false
funcreset(){
self.file=DataFile(id:1,fileSize:10)
}
View:
structTestView1:View{
@ObservedObjectprivatevardataFiles:DataFileViewModel
init(){
dataFiles=DataFileViewModel()
varbody:someView{
VStack{
///从文末源代码获取其实现
TitleView(title:[Synchronous])
Button(DownloadAll){
dataFiles.downloadFile()
.buttonStyle(BlueButtonStyle())
.disabled(dataFiles.file.isDownloading)
HStack(spacing:10){
Text(File1:)
ProgressView(value:dataFiles.file.progress)
.frame(width:180)
Text(\((dataFiles.file.progress*100),specifier:%0.0F)%)
ZStack{
Color.clear
.frame(width:30,heigh
您可能关注的文档
- 五年级工作计划模板汇总(30篇).docx
- 小班对应教案5篇.docx
- 大队委就职演讲稿(6篇).docx
- 三室两厅一厨两卫房屋买卖合同(28篇).docx
- UI设计师年终总结(29篇).docx
- 2025人事年终工作总结以及2026工作计划(3篇).docx
- 2025吊机转让合同范本(3篇).docx
- 个人工作计划优秀(29篇).docx
- 公司日常管理制度范本模板(15篇).docx
- 如何使用Java Websocket实现实时位置共享功能?.docx
- 广东省湛江市2024-2025学年高二下学期期末调研测试考试历史试卷(含答案).pdf
- 23.《海底世界》课件(共26张PPT).pptx
- 贵州省铜仁市2024-2025学年高二下学期7月教学质量监测政治试题(含解析).pdf
- 1.1青春的邀约 -2025-2026学年七年级道德与法治下册议题式精品课件(共26张PPT).pptx
- 6.1历久弥新的思想理念 2025-2026学年七年级道德与法治下册议题式精品课件(共25张PPT).pptx
- 2025年江苏省苏州市公办初中小升初入学分班考数学试卷(无答案).pdf
- 安徽省阜阳市红旗中学2024-2025学年高二上学期9月初开学摸底考试历史试题(含答案).pdf
- 11.《赵州桥》课件(共39张PPT).pptx
- 2.2.1 气温的分布与变化 课件 商务星球版地理八年级上册.pptx
- 2.3.2 板块构造 课件 中图版地理八年级上册.pptx
最近下载
- (高清版)DB50∕T 631-2015 重庆小面烹饪技术指南.pdf VIP
- 美国CTI振镜670驱动板说明书—东莞开拓激光.doc
- 2011版小学数学新课程标准解读演示文稿1(ppt).ppt VIP
- 网易智企:2025中国移动游戏私域运营指南-进阶篇.pdf
- (高清版)B-T 25915.12-2021 洁净室及相关受控环境 第12部分:监测空气中纳米粒子浓度的技术要求.pdf VIP
- 最新重庆出版社三年级上综合实践全册教案.doc VIP
- 安全防范工程通用规范 GB55029-2022 知识培训.pptx VIP
- IT行业企业级云计算服务实施方案.doc VIP
- 医院医疗人员法律法规知识培训.ppt VIP
- 装配钳工基础知识.pptx
文档评论(0)