启用完整的并发检查

Swift 6 语言模式中的数据竞争安全性旨在实现增量迁移。您可以逐模块地解决项目中的数据竞争安全问题,并且可以在 Swift 5 语言模式中将编译器的 Actor 隔离和 Sendable 检查作为警告启用,从而评估您在消除数据竞争方面的进展,然后再启用 Swift 6 语言模式。

可以使用 -strict-concurrency 编译器标志在 Swift 5 语言模式中启用完整的数据竞争安全检查作为警告。

使用 Swift 编译器

要在命令行直接运行 swiftswiftc 时启用完整的并发检查,请传递 -strict-concurrency=complete

~ swift -strict-concurrency=complete main.swift

使用 SwiftPM

在 SwiftPM 命令行调用中

-strict-concurrency=complete 可以通过 -Xswiftc 标志在 Swift 包管理器命令行调用中传递

~ swift build -Xswiftc -strict-concurrency=complete
~ swift test -Xswiftc -strict-concurrency=complete

这对于评估在包清单中永久添加标志之前(如下一节所述)的并发警告数量非常有用。

在 SwiftPM 包清单中

要在使用 Swift 5.9 或 Swift 5.10 工具的 Swift 包中为目标启用完整的并发检查,请在给定目标的 Swift 设置中使用 SwiftSetting.enableExperimentalFeature

.target(
  name: "MyTarget",
  swiftSettings: [
    .enableExperimentalFeature("StrictConcurrency")
  ]
)

当使用 Swift 6.0 或更高版本的工具时,请在给定目标的 Swift 设置中使用 SwiftSetting.enableUpcomingFeature

.target(
  name: "MyTarget",
  swiftSettings: [
    .enableUpcomingFeature("StrictConcurrency")
  ]
)

使用 Xcode

要在 Xcode 项目中启用完整的并发检查,请在 Xcode 构建设置中将“Strict Concurrency Checking”(严格并发检查)设置设为“Complete”(完整)。或者,您可以在 xcconfig 文件中将 SWIFT_STRICT_CONCURRENCY 设置为 complete

// In a Settings.xcconfig

SWIFT_STRICT_CONCURRENCY = complete;