ios - RxAlamofire 取消网络请求

标签 ios swift rx-swift rx-cocoa rxalamofire

下面是RxAlamofire网络请求的示例代码。我的问题是,每当 View Controller 被关闭时,我都想取消这个请求。

我试图将此请求分配给一个全局变量,但是 requestJSON方法返回 Observable<(HTTPURLResponse, Any)>类型。

有没有办法在 View Controller 被关闭时处理这个请求?

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 的代码: https://github.com/RxSwiftCommunity/RxAlamofire/blob/8a4856ddd77910950aa2b0f9e237e0209580503c/Sources/RxAlamofire.swift#L434

您会看到请求在处理订阅时被取消。

因此,只要您的 View Controller 被释放(以及它的处理包!),当您关闭它时,如果它还没有完成,当然请求将被取消。

关于ios - RxAlamofire 取消网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49271118/

相关文章:

objective-c - 在UIAlertView上设置延迟

ios - 如何以编程方式更改或制作新的启动图像?

swift - 引用实例方法需要等效性 (SWIFT)

ios - 如何在 RxCocoa 中为自定义按钮添加控件事件?

rx-swift - 有没有办法不触发 Variable<T> 的初始值?

java - 客户端与服务器之间的对象传输

ios - 如何正确地将 UIView 连续移动到 UIButtons 下面

ios - 计算tableView中每个单元格的值

ios - 应用程序在 isHidden 属性上崩溃

ios - 依次运行 3 个 observables,使用最后一个中第一个的结果