ios - 如何修复 Alamofire 5 错误 : "Cannot specialize non-generic type ' DataResponseSerializer'"?

标签 ios swift generics alamofire swift5

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

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

Cannot specialize non-generic type '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

最佳答案

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

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

关于ios - 如何修复 Alamofire 5 错误 : "Cannot specialize non-generic type ' DataResponseSerializer'"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56439344/

相关文章:

IOS 8.3 UIPopoverController 中的任何 UISegmentedControl 色调为白色且不可调节

ios - 如何快速组织uitableview的动态数量作为滑动页面

ios - 如何将 tableView 的多行传输到另一个 ViewController

ios - Swift:在 if 语句中设置自定义 UITableViewCell 类

c# - DataContractSerializer 的行为方式与 KnownTypes 和 Generics 混淆

Swift 泛型类型推断

iphone - 如何使用另一个 Apple ID 将已上线的 iOS 应用程序提交到 App Store?

ios - 在 iPhone sdk 中意外退出警报?

swift - 一个场景中有多少个 SKNode?为什么我的表现这么差?

swift - 用于查找给定类型的子类的整洁方法签名