swift-concurrency-expert - swiftui-concurrency-tour-wwdc
SwiftUI 并发之旅摘要背景面向 SwiftUI 的并发概述涵盖 actor 隔离、Sendable 闭包以及 SwiftUI 如何在主线程之外运行工作。SwiftUI 中的主 actor 默认View默认是MainActor隔离的成员和body继承隔离。Swift 6.2 可以为模块中的所有类型推断MainActor新的语言模式。这个默认简化了 UI 代码并与 UIKit/AppKit 的MainActorAPI 保持一致。SwiftUI 在主线程之外运行代码的地方SwiftUI 可能出于性能原因在后台线程上评估某些视图逻辑。示例Shape路径生成、Layout方法、visualEffect闭包和onGeometryChange闭包。这些 API 通常要求Sendable闭包以反映其运行时语义。Sendable 闭包与数据竞争安全从Sendable闭包访问MainActor状态是不安全的编译器会标记出来。优先在闭包捕获列表中捕获值的副本例如复制一个Bool。避免仅仅为了读取单个属性而把self发送进 sendable 闭包。使用 SwiftUI 组织异步工作SwiftUI 动作回调是同步的因此 UI 更新如加载状态可以立即进行。使用Task桥接到异步上下文保持异步体最小化。以状态为边界异步工作更新模型/状态UI 同步响应。性能驱动的并发将昂贵的工作从主 actor 卸载以避免卡顿。保持对时间敏感的 UI 逻辑动画、手势响应为同步。将 UI 代码与长时间运行的异步工作分离以提高响应性和可测试性。