swift知识技巧搜集

WWDC21-认识Swift中的async/await

2021-06-14  本文已影响0人  行知路

一、实例对比

        假如我们需要从网络下载一个图片,并且把图片转换为缩略图;这两个操作都是耗时的操作,所以在下面的代码中使用了异步下载数据与异步创建缩略图的能力。

普通的函数
        如果你已经习惯于写这样的代码,或者从来么有想过这样的代码是否有问题。那么,你会认为这些代码没什么问题,就应该这样的,其实这段代码的可读性太差、对于一个这么简单的任务所需的代码量也是巨大的。
        针对返回值,我们可以使用Swift提供的Result类型来进行一些优化,消除第一个函数中潜在的逻辑表达瑕疵(如果不理解的话可以看看Swift为什么引入Result类型)。
稍微优化后的方法
        是时候展示一下最新的代码的样子了!请仔细看一下下面的代码!虽然有些代码你可能看不懂,但是这段代码与上面的代码相比,是不是简单很多很多很多!
async/await代码
        函数声明中的async标明这个函数时可以异步执行的——也就是说执行这段代码是可以不阻塞当前线程。然后再try await语句中,异步等待从网路请求数据完成。在最后一个await中,可以异步等待通过图片获取缩略图。
        请仔细阅读以上代码!也许你觉得这只是Swift引入了一些新的关键字、实现了一些新的能力,也不代表什么!其实这种代码的背后是有巨大的差异!非async/await代码,就像以前没有引入结构化程序设计时的代码一样,充满了goto(在这里指完成回调),这严重影响了代码的阅读,降低了人效!引入了async/let之后,把异步编码结构化了,使我们可以按照自然的思维习惯去实现功能、编写代码。进步是巨大的!

二、async/await分析

        除了上面代码所展示的——函数/方法可以是异步的,属性也可以是异步的。


异步属性

        在函数、属性和初始值设定项中,await 可用于表达式可以解除当前线程阻塞;除此之外,await还可以用于异步序列。


异步序列

        关于async/let的说明。


异步的特性

三、async/await应用相关

3.1 基于SwiftUI的应用

基于SwiftUI的应用

3.2 既有的完成处理程序&Delegate

        苹果对现存的以完成回调、代理返回的方法都进行了处理,以支持此种新特性。

上一篇 下一篇

猜你喜欢

热点阅读