Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios RxAlamofire取消网络请求_Ios_Swift_Rx Swift_Rx Cocoa_Rxalamofire - Fatal编程技术网

Ios 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

下面是RxAlamofire网络请求的示例代码。我的问题是,每当关闭视图控制器时,我都想取消此请求

我试图将此请求分配给一个全局变量,但
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不是零。谢谢。好吧,我发现它已经取消了请求,除非保留计数不是零。谢谢