Xcode14中Foundation.Date不遵循Sendable的警告及Swift6适配方案咨询
解决Sendable合规性警告:Date类型的处理方案
在Xcode 14完整并发检查模式下,Article结构体因声明遵守Sendable协议,但Date属性被标记为非Sendable类型触发警告,该问题在Swift 6会升级为错误,以下是几种可行的解决办法:
显式扩展Date使其遵守Sendable
Date本身是线程安全的值类型,只是在部分Swift版本中没有显式声明遵守Sendable。你可以通过全局扩展补全这个声明,消除警告:extension Date: Sendable {}把这段代码放在项目的全局文件中(比如新建一个
SendableCompliance.swift)即可生效。用@unchecked Sendable标记结构体
如果你能确认Article的所有属性(包括Date)都不存在线程安全问题,可以直接给结构体加上@unchecked Sendable标记,让编译器跳过严格的Sendable检查:struct Article: @unchecked Sendable { let title: String let date: Date }注意:这个方式要谨慎使用,只有在你完全确认类型线程安全的前提下才推荐,避免引入潜在的数据竞争风险。
依赖后续Swift版本的默认支持
随着Swift的迭代,像Date这类系统基础值类型会在后续版本(比如Swift 6正式版)中默认显式遵守Sendable,届时这个警告会自动消失。但如果需要兼容当前版本,优先考虑前两种方案。
内容的提问来源于stack exchange,提问作者bobby123uk
相关产品推荐
相关产品推荐

