Swift 5.5引入了协同程序、分层任务管理和功能暂停。其中一个新功能是的语法
async let image = downloadImage(url)
图像的声明可以是await
'ed。但问题是,它的类型是什么?Xcode说它的类型是什么?我可以为函数参数声明什么类型来接受此对象?
问题是,它的类型是什么?
这个问题的解决方式与任何带有初始化的变量声明相同:通过等号右侧的类型。
例如,如果您有一个返回String的方法(让我们将其命名为getMyString
(,那么当您说时
let s = getMyString()
s
被类型化为String,根据被调用方法的返回类型推断。
嗯,这与async let
:没有什么不同
async let s = getMyString()
如果getMyString
返回一个字符串,那么s
将是一个字符串。
唯一的区别是,假设,String是异步返回的。但这对这里的整体语法没有什么不同。这就是async/await
的整个点;它允许您在正常Swift语法的范围内异步调用代码(而不必使用GCD闭包绕月跳舞(。
与许多其他编程语言不同,Swift的并发模型根本不使用Future
、Promise
或类似类型。表达式要么需要await
ed,要么不需要。
因此,在其他编程语言(如JavaScript(中使用异步/等待实现的东西在Swift:中不起作用
func test() async {
let a = getNumber() // error: Expression is 'async' but is not marked with 'await'
print(await a) // warning: No 'async' operations occur within 'await' expression
}
func getNumber() async -> Int {
42
}
这就是async let
语法的原因之一:它允许您调用异步函数,但将await
延迟到以后。