关于 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)
}
}
有几点不明白:
- 使 URLSessionDataTask 符合 'Cancellable' 协议的目的是什么;
- 如果 URLSessionDataTask 符合 'Cancellable' 协议,为什么它不实现 'Cancellable' 协议要求的方法;
- 当我检查 AnyCancellable 的初始化程序时,没有接受参数的初始化程序,那么 'AnyCancellable(task)' 在这里做了什么,是否正确?
感谢任何帮助。
- What is the purpose of making URLSessionDataTask conform to 'Cancellable' protocol?
以便您可以使用 AnyCancellable
。 AnyCancellable
初始化程序仅适用于符合 Cancellable
.
的类型
- If URLSessionDataTask conforms to 'Cancellable' protocol, why does not it implement the methods that 'Cancellable' protocol requires;
Cancallable
要求有方法cancel
和store(in:)
。 cancel
已经存在于 URLSessionTask
- URLSessionDataTask
的基础 class,并且 store(in:)
作为 Cancellable
的扩展实现,提供默认实现。
- 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?
AnyCancellable
有 init(_:)
接受 Cancellable
在 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)
}
}
有几点不明白:
- 使 URLSessionDataTask 符合 'Cancellable' 协议的目的是什么;
- 如果 URLSessionDataTask 符合 'Cancellable' 协议,为什么它不实现 'Cancellable' 协议要求的方法;
- 当我检查 AnyCancellable 的初始化程序时,没有接受参数的初始化程序,那么 'AnyCancellable(task)' 在这里做了什么,是否正确?
感谢任何帮助。
- What is the purpose of making URLSessionDataTask conform to 'Cancellable' protocol?
以便您可以使用 AnyCancellable
。 AnyCancellable
初始化程序仅适用于符合 Cancellable
.
- If URLSessionDataTask conforms to 'Cancellable' protocol, why does not it implement the methods that 'Cancellable' protocol requires;
Cancallable
要求有方法cancel
和store(in:)
。 cancel
已经存在于 URLSessionTask
- URLSessionDataTask
的基础 class,并且 store(in:)
作为 Cancellable
的扩展实现,提供默认实现。
- 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?
AnyCancellable
有 init(_:)
接受 Cancellable