Alamofire的接口如何取消
看下面的例子
//MARK:-网络请求管理
static fileprivate var requestCacheArr = [DataRequest]();
//MARK:-发起网络请求
let dataRequest = SessionManager.default.request("").responseJSON { (responseJSON) in
//移除已经完成的网络请求
self.removeTask(task: responseJSON.request!);
}
//记录网络请求
self.requestCacheArr.append(dataRequest);
for task in self.requestCacheArr{
task.cancel();
}
self.requestCacheArr.removeAll();
Alamofire+Moya后,如何取消接口请求
var requests: [Cancellable] = []
func doRequests() {
for i in 1...20 {
let request = provider.request(MyApi.someMethod) {
result in
print(result)
}
requests.append(request)
}
requests.forEach { cancellable in cancellable.cancel() }
// here I go through the array and cancell each request.
requests.removeAll()
}
Alamofire+Moya+Rxswift如何取消网络请求
取消所有接口
func cancelAllRequest() {
apiProvider.manager.session.getTasksWithCompletionHandler {
(sessionDataTask, uploadData, downloadData) in
sessionDataTask.forEach { $0.cancel() }
uploadData.forEach { $0.cancel() }
downloadData.forEach { $0.cancel() }
}
}
取消对应的url接口
func cancelAllRequest(_ url: String) {
apiProvider.manager.session.getTasksWithCompletionHandler {
(sessionDataTask, uploadData, downloadData) in
sessionDataTask.forEach {
//只取消指定url的请求
if ($0.originalRequest?.url?.absoluteString == url) {
$0.cancel()
}
}
}
}
使用Rxswift后,还有一个更好的控制取消的是DisposeBag
DisposeBag如同名字,是一个Bag类型的数据结构,里面存放Disposable的数据。
每次看到Disposable类型调用disposed(by: disposeBag),实际上是将Disposable放在DisposeBag中进行管理,当DisposeBag进行dispose时,对其中管理的Disposable分别dispose,可是DisposeBag不能主动调用,只能在deinit时自动释放,因此想要进行dispose操做,只能将disposeBag从新赋值,好比:
disposeBag = DisposeBag()
所以接口的生命周期是由disposeBag控制,把disposeBag定义在controller里面,当controller销毁时,那么他里面的接口也全部取消