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

Swift 5:如何解决NSManagedObjectContext perform的非Sendable警告?

解决Swift 5中NSManagedObjectContext.perform的Sendable警告

警告原因

该警告来自Swift的并发安全机制:传递给perform的异步闭包属于非Sendable类型,存在数据竞争风险,Swift 6会将此直接判定为错误。

解决方法

显式将闭包标注为@Sendable,明确告知编译器该闭包符合并发安全要求,同时保证闭包内的错误能正确向上抛出。

修改后的代码示例

import CoreData
class Model{
  func foo() async throws {
    let ctx = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
    // ... 其他上下文配置逻辑
    try await ctx.perform { @Sendable () throws -> Void in
      if ctx.hasChanges {
        try ctx.save()
      }
    }
  }
}

补充说明

使用.privateQueueConcurrencyType的Core Data上下文本身已保证线程安全,添加@Sendable标注只是满足Swift并发检查的规则。如果项目开启了Strict Concurrency Checking(严格并发检查),这类标注是必须的,也是适配Swift 6的必要操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:37:08