【发布时间】:2021-06-13 15:49:34
【问题描述】:
Swift 5.5 引入了协程、分层任务管理和函数挂起。 新功能之一是语法
async let image = downloadImage(url)
图像的声明可以是await'ed。但问题是,它的类型是什么? Xcode 说它的类型是什么?我可以为函数参数声明什么类型来接受这个对象?
【问题讨论】:
-
好问题。正如你在尝试时所看到的,Xcode 只会报告它被声明为
async let image: UIImage。 Xcode 变量检查器只会说它是UIImage。没有通用的包装器类型,就像我们习惯于在组合类型中看到的那样。但它也不仅仅是一个简单的UIImage,因为你不能只使用它而不用await(或try await)修饰后续引用。 -
FWIW,如果您正在寻找术语,变量
image的 type 是UIImage,但在幕后,编译器会为它创建一个task,即“async-let binding”任务。见Explore structured concurrency in Swift。 -
@Rob 是的,谢谢你,我想了这么多!但是 - 这是一个问题......如何将实例化的
async let传递给函数!除了通过明显的“异步关闭”方法之外,还无法解决这个问题...... -
当您将其作为参数提供给该函数时,您通常只会使用
await(或try await)。
标签: swift asynchronous async-await static-typing