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

实例方法dataTask函数类型可发送性与URLSessionProtocol协议要求不匹配

URLSessionProtocol发送性警告的原因

这个警告的核心是Swift并发模型中的Sendability(发送性)约束不匹配,具体原因如下:

  • Swift 5.5及以后版本引入了并发安全机制,系统提供的URLSession.dataTask(with:completionHandler:)方法里,闭包参数被隐式标记为@Sendable,确保该闭包可以安全地跨并发执行上下文传递。
  • 你自定义的URLSessionProtocol中,DataTaskResult只是普通的闭包类型别名,没有显式声明@Sendable约束,导致协议定义的dataTask方法对completionHandler的发送性要求,和URLSession原生方法的要求不一致。
  • 当让URLSession遵循该协议时,两者的函数类型发送性不匹配,因此触发警告。

修正方案

只需给DataTaskResult添加上@Sendable标记即可:

protocol URLSessionProtocol {
    typealias DataTaskResult = @Sendable (Data?, URLResponse?, Error?) -> Void

    func dataTask(with request: URLRequest, completionHandler: @escaping DataTaskResult) -> URLSessionDataTask
}

extension URLSession: URLSessionProtocol { }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:07