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

What is the type of `async let` declaration in Swift?

Swift 5.5引入协程,分层任务管理和功能挂起。 其中一项新功能是

的语法
async let image = downloadImage(url)

图像的声明可以await。但问题是,它的类型是什么? Xcode 表示它的类型是什么?我可以声明什么类型的函数参数来接受这个对象?

the question is, what is its type?

这个问题的解决方法与 any 带有初始化的变量声明相同:通过等号右侧的类型。

例如,如果您有一个方法 return 是一个字符串(我们将其命名为 getMyString),那么当您说

let s = getMyString()

...s 类型为字符串,从被调用方法的 return 类型推断。

嗯,跟async let没什么区别:

async let s = getMyString()

如果 getMyString return 是一个字符串,s 将是一个字符串。

唯一的区别是,假设,String 是return异步。但这对这里的整体语法没有影响。即async/await的全部;它允许您在正常 Swift 语法范围内异步调用代码(而不是必须使用 GCD 闭包绕着月亮跳舞)。

与许多其他编程语言不同,Swift 的并发模型根本不使用 FuturePromise 或类似类型。 表达式要么需要 awaited,要么不需要。

因此,可以在其他编程语言(例如 JavaScript)中使用 async/await 实现的东西在 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 语法的原因之一:它允许您调用异步函数,但将 awaiting 推迟到以后。