Alamofire 5 继承“DataRequest”

Posted

技术标签:

【中文标题】Alamofire 5 继承“DataRequest”【英文标题】:Alamofire 5 inherit 'DataRequest' 【发布时间】:2020-02-17 23:33:50 【问题描述】:

试图从 Alamofire 继承 DataRequest 给我一个访问错误,因为从 Alamofire 5 我看到 DataRequest 类是公共的并且未打开。我的问题是:是否有可能在不修改 Alamofire 来源的情况下继承它?

编辑 1:

我正在寻找一个 CoreData 缓存系统。我想在解码之前保存请求和响应。在路线中,我会指定每条路线的年龄和大小。

@discardableResult
    func performRequest<T: Decodable>(for route: Route, decoder: JSONDecoder = JSONDecoder(), completion: @escaping (Result<T, AFError>) -> Void) -> DataRequest 
        return sessionManager.request(NetworkRouter(route))
            .validate(statusCode: 200..<300)
            .cacheResponse()
            .responseDecodable(decoder: decoder)  (response: DataResponse<T, AFError>) in
                completion(response.result)
        
    

【问题讨论】:

【参考方案1】:

不,DataRequest 故意不是open。如果您想讨论子类化的替代方案,请根据您的要求更新您的问题,或者随时在我们的Swift forum 上打开一个主题。


要分离出缓存,这实际上取决于您要缓存的内容。如果您正在缓存数据并希望直接在请求管道中进行操作,您可以实现CachedResponseHandler 来决定何时何地缓存响应。如果您想在响应后执行此操作,可以将处理放在您的 responseDecodable 中,或者如果您需要访问原始的 Data,则实现您自己的 ResponseSerializer

最终,您在哪里实现缓存取决于您要缓存的内容以及您想要缓存它的时间。不需要子类。

【讨论】:

@DeryckLucian 更新了答案。

以上是关于Alamofire 5 继承“DataRequest”的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 5 任何字典

错误 Alamofire 5 响应成功和响应失败

taskWillPerformHTTPRedirection 从未在 Alamofire 5 中调用

Swift 5.1 和 Alamofire 5.1:GET 方法错误

Alamofire 5 代表中缺少 sessionDidReceiveChallenge

Alamofire 5 类型 'Request' 没有成员 'authorizationHeader'