首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在删除Swift RxAlamofire依赖项

正在删除Swift RxAlamofire依赖项
EN

Stack Overflow用户
提问于 2020-09-03 02:37:59
回答 1查看 82关注 0票数 1

我正在尝试消除对RxAlamofire的依赖。

我目前有这个函数:

代码语言:javascript
复制
  func requestData(_ urlRequest: URLRequestConvertible) -> Observable<(HTTPURLResponse, Data)> {

    RxAlamofire.request(urlRequest).responseData()

  }

我如何重构它并直接使用Alamofire来构建和返回一个RxSwift Observable?

EN

回答 1

Stack Overflow用户

发布于 2020-09-03 05:47:20

我建议你看看这个库包装URLRequest的方式,以了解如何做到这一点……

下面是库中的一个简短示例。本质上,您需要使用Observable.create,进行网络调用,传入一个知道如何使用create提供的观察者的闭包。

确保在完成后发送一个completed,并确保disposable知道如何取消请求。

你的Base将会是Alamofire中的某个东西(我没有使用Alamofire,所以我不确定它可能是什么。)

代码语言:javascript
复制
extension Reactive where Base: URLSession {
    /**
    Observable sequence of responses for URL request.
    
    Performing of request starts after observer is subscribed and not after invoking this method.
    
    **URL requests will be performed per subscribed observer.**
    
    Any error during fetching of the response will cause observed sequence to terminate with error.
    
    - parameter request: URL request.
    - returns: Observable sequence of URL responses.
    */
    public func response(request: URLRequest) -> Observable<(response: HTTPURLResponse, data: Data)> {
        return Observable.create { observer in
            let task = self.base.dataTask(with: request) { data, response, error in
                guard let response = response, let data = data else {
                    observer.on(.error(error ?? RxCocoaURLError.unknown))
                    return
                }

                guard let httpResponse = response as? HTTPURLResponse else {
                    observer.on(.error(RxCocoaURLError.nonHTTPResponse(response: response)))
                    return
                }

                observer.on(.next((httpResponse, data)))
                observer.on(.completed)
            }

            task.resume()

            return Disposables.create(with: task.cancel)
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63711698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档