实例方法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
相关产品推荐
相关产品推荐

