我目前正在使用Moya来构建我的网络调用。根据他们的文档,我将其配置如下:
enum SomeAPIService {
case endPoint1(with: Object)
case endPoint2(duration: Int)
}
调用端点(在本例中为endPoint1
)时,我执行以下操作:
let provider = MoyaProvider<SomeAPIService>()
provider.request(.endPoint1(object: object)) { (result) in
switch result {
case let .success(moyaResponse):
finished(Result.success(value: moyaResponse.value))
case let .failure(error):
let backendError = BackendError(localizedTitle: "", localizedDescription: "Some error", code: moyaResponse.statusCode)
finished(Result.failure(error: backendError))
}
})
我的目标是,在用户执行操作后,取消所有正在发生的网络请求。
因此,Moya 确实允许从此处的讨论中取消请求。从最受好评的评论中,有人提到let request_1 = MoyaRequestXXXXX
然后ruest_1.cancel()
我的问题是:
- 我将如何保持指向请求的指针?
provider
没有cancel()
功能 - 那么我应该如何调用它?
任何帮助深表感谢。
编辑:
根据有关 using 的有用建议[Cancellable]
,我执行了以下操作:
(1) 在我的应用程序的单例实例Operator
中,我添加了var requests = [Cancellable]()
(2) 每个 API 调用都作为可取消添加到requests
数组中,如下所示:
let provider = MoyaProvider<SomeAPIService>()
Operator.shared.requests.append(provider as! Cancellable) //causing error
provider.request(.endPoint1(object: object)) { (result) in
//rest of the block omitted
我认为我的语法不正确,并且正在添加提供程序而不是请求。但是,既然请求本身就是一个块,那么添加请求的地方在哪里呢?