关于 Swift 中的 URLSessionDataTask 和 Combine 的问题

A question about URLSessionDataTask and Combine in Swift

article 中,我看到了如下代码片段:

extension URLSessionDataTask: Cancellable {}

extension URLSession: NetworkService {
   public func fetchData(with request: URLRequest, handler: @escaping (Data?, URLResponse?, Error?) -> Void) -> AnyCancellable {
      let task = dataTask(with: request, completionHandler: handler)
      task.resume()
      return AnyCancellable(task)
   }
}

有几点不明白:

  1. 使 URLSessionDataTask 符合 'Cancellable' 协议的目的是什么;
  2. 如果 URLSessionDataTask 符合 'Cancellable' 协议,为什么它不实现 'Cancellable' 协议要求的方法;
  3. 当我检查 AnyCancellable 的初始化程序时,没有接受参数的初始化程序,那么 'AnyCancellable(task)' 在这里做了什么,是否正确?

感谢任何帮助。

  1. What is the purpose of making URLSessionDataTask conform to 'Cancellable' protocol?

以便您可以使用 AnyCancellableAnyCancellable 初始化程序仅适用于符合 Cancellable.

的类型
  1. If URLSessionDataTask conforms to 'Cancellable' protocol, why does not it implement the methods that 'Cancellable' protocol requires;

Cancallable要求有方法cancelstore(in:)cancel 已经存在于 URLSessionTask - URLSessionDataTask 的基础 class,并且 store(in:) 作为 Cancellable 的扩展实现,提供默认实现。

  1. When I check the initialiser of AnyCancellable, there is no initialiser which accepts an argument, so what does 'AnyCancellable(task)' do here and is it correct?

AnyCancellableinit(_:) 接受 Cancellable