下面是RxAlamofire网络请求的示例代码。我的问题是,每当被解职时,我都想取消这个请求。
我试图将此请求分配给全局变量,但requestJSON
方法返回Observable<(HTTPURLResponse, Any)>
类型。
是否有一种方法来处理此请求时,视图控制器被解雇?
RxAlamofire.requestJSON(.get, sourceStringURL)
.debug()
.subscribe(onNext: { [weak self] (r, json) in
if let dict = json as? [String: AnyObject] {
let valDict = dict["rates"] as! Dictionary<String, AnyObject>
if let conversionRate = valDict["USD"] as? Float {
self?.toTextField.text = formatter
.string(from: NSNumber(value: conversionRate * fromValue))
}
}
}, onError: { [weak self] (error) in
self?.displayError(error as NSError)
})
.disposed(by: disposeBag)
发布于 2018-03-14 08:48:49
如果您查看RxAlamofire的代码:https://github.com/RxSwiftCommunity/RxAlamofire/blob/8a4856ddd77910950aa2b0f9e237e0209580503c/Sources/RxAlamofire.swift#L434
在释放订阅时,您将看到请求被取消。
因此,只要您的视图控制器被释放(和它的处置袋与它!)当然,当你驳回请求时,如果它还没有完成的话,它就会被取消。
发布于 2018-03-14 16:45:45
正如Valérian所指出的,当您的ViewController被取消时,它和它的所有属性都将被取消分配(如果保留计数下降到0,即)。
特别是,当disposeBag
属性被解除分配时,将对添加到此包中的所有可观察序列调用dispose()
。反过来,它将在request.cancel()
实现中调用RxAlamofire。
如果您需要更早地取消您的请求,您可以直接尝试不使用disposeBag
。
https://stackoverflow.com/questions/49271118
复制相似问题