【问题标题】:How to fix Alamofire 5 Error: "Cannot specialize non-generic type 'DataResponseSerializer'"?如何修复 Alamofire 5 错误:“无法专门化非泛型类型 'DataResponseSerializer'”?
【发布时间】:2019-10-19 17:11:02
【问题描述】:

我正在将 Network Foundation 更新为 Swift(和 Alamofire)版本 5。

应该提供“通用响应对象序列化”的一种方法是抛出错误

无法专门化非泛型类型“DataResponseSerializer”

我认为在 Alamofire 5 中,他们将类型 DataResponseSerializer 设为非泛型。任何想法如何在最新版本中实现相同的行为?不幸的是,我对 Alamofire 和 Generics 都不是很熟悉。

public extension Alamofire.DataRequest {

  @discardableResult
  func responseDecodableObject<T: Decodable>(completionHandler: @escaping (DataResponse<T>) -> Void) -> Self {

    //error is thrown here
    let responseSerializer = DataResponseSerializer<T> { request, response, data, error in

        guard error == nil else { return .failure(error!) }

        let result = DataRequest.jsonResponseSerializer(options: .allowFragments).serializeResponse(request, response, data, error)

        switch result {
        case .success(let value):
            do {
               let data = try JSONSerialization.data(withJSONObject: value, options: .prettyPrinted)
               return .success(try JSONDecoder().decode(T.self, from: data))
            } catch {
                return .failure(ErrorSerializer.JSONDecoderFailed(json: "\(value)", errorText: error.localizedDescription))
            }
        case .failure(let error):
            return.failure(error)
        }
    }

    return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
  }
}

我发现许多教程展示了实现此目的的方法,但它们都共享通用 DataResponseSerializer。例如:Medium

【问题讨论】:

  • 在声明块时不要认为你需要&lt;T&gt; ,没有它对我来说很好

标签: ios swift generics alamofire swift5


【解决方案1】:

你是对的,DataResponseSerializer 在 Alamofire 5 中不再是通用的。

更重要的是,Alamofire 现在支持 Decodable 内置 responseDecodableDecodableResponseSerializer,因此您无需自己编写。

【讨论】:

  • 请帮帮我(-:我尝试更改不是我编写的应用程序并拥有此功能,但找不到任何好的替代品,公共静态功能对象序列化器(通过解析器:T ) -> DataResponseSerializer>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
相关资源
最近更新 更多