Ios RxAlamofire取消网络请求
下面是RxAlamofire网络请求的示例代码。我的问题是,每当关闭视图控制器时,我都想取消此请求 我试图将此请求分配给一个全局变量,但Ios RxAlamofire取消网络请求,ios,swift,rx-swift,rx-cocoa,rxalamofire,Ios,Swift,Rx Swift,Rx Cocoa,Rxalamofire,下面是RxAlamofire网络请求的示例代码。我的问题是,每当关闭视图控制器时,我都想取消此请求 我试图将此请求分配给一个全局变量,但requestJSON方法返回Observable类型 当视图控制器被解除时,是否有办法处理此请求 RxAlamofire.requestJSON(.get, sourceStringURL) .debug() .subscribe(onNext: { [weak self] (r, json) in
requestJSON
方法返回Observable
类型
当视图控制器被解除时,是否有办法处理此请求
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)
RxAlamofire.requestJSON(.get,sourceStringURL)
.debug()
.subscribe(onNext:{[weak self](r,json)在
如果让dict=json作为?[字符串:AnyObject]{
让valDict=dict[“rates”]作为字典
如果let conversionRate=valDict[“USD”]作为浮动汇率{
self?.toTextField.text=格式化程序
.string(from:NSNumber(值:转换率*fromValue))
}
}
},onError:{[weak self](错误)位于
self?.displayError(错误为N错误)
})
.处置(由:处置人)
如果您查看RxAlamofire的代码:
当订阅被释放时,您将看到请求被取消
因此,只要您在关闭视图控制器时将其释放(及其处置包!),那么如果该请求尚未完成,则该请求将被取消。如果您查看RxAlamofire的代码: 当订阅被释放时,您将看到请求被取消
因此,只要在您解除ViewController时释放它(以及它的dispose bag!),那么如果请求没有完成,那么请求将被取消。正如Valérian指出的那样,当您解除ViewController时,它及其所有属性将被解除分配(如果retain count降至0,也就是说) 特别是,当解除分配
disposeBag
属性时,将对添加到此包的所有可观察序列调用dispose()
。在RxAlamofire实现中,它将依次调用request.cancel()
如果您需要提前取消请求,您可以尝试直接将
disposeBag
置零。正如Valérian指出的,当您的ViewController被解除时,它及其所有属性将被解除分配(如果retain count降至0,也就是说)
特别是,当解除分配disposeBag
属性时,将对添加到此包的所有可观察序列调用dispose()
。在RxAlamofire实现中,它将依次调用request.cancel()
如果您需要提前取消请求,您可以尝试直接将
disposeBag
设置为零。好的,我发现它已经取消了请求,除非retain count不是零。谢谢。好吧,我发现它已经取消了请求,除非保留计数不是零。谢谢