Swift中"async let"声明的类型是什么



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的并发模型根本不使用FuturePromise或类似类型。表达式要么需要awaited,要么不需要。

因此,在其他编程语言(如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延迟到以后。

相关内容