【发布时间】:2026-02-22 10:10:02
【问题描述】:
我目前正在使用Moya 来构建我的网络调用。根据他们的docs,我将其配置如下:
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 确实允许人们取消来自讨论 here 的请求。在点赞最多的评论中,有人提到了let request_1 = MoyaRequestXXXXX,然后是ruest_1.cancel()
我的问题是:
- 如何保留指向请求的指针?
-
provider没有cancel()函数 - 那我应该如何调用它?
非常感谢任何帮助。
编辑:
根据有关使用 [Cancellable] 的有用建议,我做了以下操作:
(1) 在我的应用程序的单例实例Operator 中,我添加了var requests = [Cancellable]()
(2) 每个 API 调用都作为 Cancelable 添加到 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
我认为我的语法不正确,我添加的是提供者而不是请求。但是,既然请求本身就是一个块,那么添加请求的地方在哪里呢?
【问题讨论】:
标签: ios swift networking alamofire moya