You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 6严格并发检查:协议符合Sendable的疑问与实现

Swift 6并发检查:协议继承Sendable的约束说明

当你让FooProtocol继承Sendable时,核心要求是所有遵循该协议的具体类型必须符合Sendable规范,而非仅要求协议内的函数满足某种并发条件。

具体解释:

  • Sendable是Swift并发模型中用于标记类型可安全跨actor传递的约束。当协议继承Sendable,就相当于给所有遵循该协议的类型加上了强制要求:
    • 值类型(如结构体、枚举)默认符合Sendable,只要其所有属性也符合Sendable;
    • 引用类型(如类)要么是final且所有属性符合Sendable,要么必须显式添加@unchecked Sendable标记(需自行保证并发安全)。
  • 回到你的例子:Bar是Sendable结构体,它的foo属性为any FooProtocol类型。如果FooProtocol不继承Sendable,编译器无法确认这个抽象类型的实例是否能安全跨actor传递,因此触发警告。而让协议继承Sendable后,编译器会强制校验所有FooProtocol的遵循者是否符合Sendable,从而确保any FooProtocol实例满足并发安全要求,警告自然消除。

额外注意:

协议内函数的并发特性(比如async修饰)和Sendable是完全不同的概念:前者关注函数的调用方式是否支持异步,后者关注类型本身在并发环境下的传递安全性,二者没有直接关联。

内容的提问来源于stack exchange,提问作者squarefrog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:34:56