模块“Swift”没有名为“Task”的成员

Jay*_*win 5 swift

我在我的项目中创建了一个名为的枚举Task。现在我想使用 Swift Task( https://developer.apple.com/documentation/swift/task )。

当我想使用 Swift 时,Task我写道: Swift.Task { ... }但出现错误:Module 'Swift' has no member named 'Task'

Ita*_*ber 11

为了支持Swift 并发功能向后部署到较旧的操作系统,Swift 将并发 API 构建到一个单独的库中,该库可以与 Swift 标准库分开发布。该swift_Concurrency作为一个名为 的隐式模块公开_Concurrency,该模块是从 Swift 标准库重新导出的。

\n

然而,Swift 并发类和类型仍然属于这个仅实现的库,因此为了消除歧义,您需要编写_Concurrency.Task而不是Swift.Task.

\n

您也可以在 Xcode 中看到这一点:如果您在新项目中引用Task,然后 ^-\xe2\x8c\x98 - 单击该符号跳转到其定义,您将在库界面中找到它_Concurrency

\n

Xcode中的任务接口定义

\n
\n

不要为了消除歧义而明确地写出来_Concurrency.Task,而是考虑以下几点:

\n
    \n
  1. 如果您希望自己的类型优先,并且不想重命名它,则可以typealias为该类型创建一个(例如 )typealias SwiftTask = _Concurrency.TaskTask
  2. \n
  3. 或者,取决于它对您的项目是否有意义(并且在上下文中合理):这可能是一个为您的类型考虑更具体的名称的机会,以避免名义上和逻辑上的冲突。async/awaitTask主要的新语言/stdlib 功能,将在很长一段时间内产生影响,因此,如果 stdlib 将来要保留该词,那么选择一个不太通用的词可能是有意义的
  4. \n
\n