如何使用Swift 6且不启用SWIFT_STRICT_CONCURRENCY=COMPLETE,保留全局可变非Actor隔离变量?
在Swift 6中禁用严格并发检查并保留全局可变非Actor隔离变量
1. 关闭严格并发检查
要在Swift 6模式下跳过严格并发强制检查,需调整项目编译设置:
- Xcode项目:进入目标的「Build Settings」,搜索「Strict Concurrency Checking」,将选项设置为「Minimal」或「None」。其中「None」会完全关闭所有并发检查,更匹配你的需求;「Minimal」仅启用最基础的并发规则,仍可能保留少量检查。
- Swift Package:在
Package.swift的target配置中添加对应编译标志:targets: [ .target( name: "YourTarget", swiftSettings: [ .enableUpcomingFeature("StrictConcurrency=none") ] ) ]
2. 保留全局可变非Actor隔离变量
禁用严格并发检查后,你原有的全局可变变量无需修改即可正常使用。如果编译器仍抛出Sendable相关警告,可通过以下方式消除:
- 对于基础类型的全局变量,直接给类型标记
@unchecked Sendable(该标记告知编译器你已确认变量动态层面的并发安全性,无需强制校验):var globalCounter: @unchecked Sendable Int = 0 - 对于自定义类/结构体的全局实例,给类型添加
@unchecked Sendable标记:class AppState: @unchecked Sendable { var userID: String? var isLoggedIn = false } var appGlobalState = AppState()
注意:关闭严格并发检查后,编译器不再负责校验并发安全,所有线程安全的责任完全由你承担,请务必确保代码在动态执行时无并发问题。
内容的提问来源于stack exchange,提问作者Isaaс Weisberg
相关产品推荐
相关产品推荐

