У меня ошибка при создании моей модели из QuickType в Xcode с Swift - PullRequest
0 голосов
/ 07 мая 2019

Я работаю с alamofire 4.0, я генерирую свои модели из QuickType очень полезного инструмента, но я получаю эту ошибку.В расширении Alamofire я не понимаю, что может произойти, поскольку весь этот класс возвращает консоль QuickType.

Это модель, которую я получил от quicktype с расширением Alamofire

import Foundation
import Alamofire

class LoginResponse: Codable {
    let user: JSONNull?
    let status: Int
    let success: Bool
    let message: String

    init(user: JSONNull?, status: Int, success: Bool, message: String) {
        self.user = user
        self.status = status
        self.success = success
        self.message = message
    }
}

// MARK: Encode/decode helpers

class JSONNull: Codable, Hashable {

    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
        return true
    }

    public var hashValue: Int {
        return 0
    }

    public init() {}

    public required init(from decoder: Decoder) throws {
        let container = try decoder.singleValueContainer()
        if !container.decodeNil() {
            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
        }
    }

    public func encode(to encoder: Encoder) throws {
        var container = encoder.singleValueContainer()
        try container.encodeNil()
    }
}

fileprivate func newJSONDecoder() -> JSONDecoder {
    let decoder = JSONDecoder()
    if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
        decoder.dateDecodingStrategy = .iso8601
    }
    return decoder
}

fileprivate func newJSONEncoder() -> JSONEncoder {
    let encoder = JSONEncoder()
    if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
        encoder.dateEncodingStrategy = .iso8601
    }
    return encoder
}

// MARK: - Alamofire response handlers

extension DataRequest {
    fileprivate func decodableResponseSerializer<T: Decodable>() -> DataResponseSerializer<T> {
        return DataResponseSerializer { _, response, data, error in
            guard error == nil else { return .failure(error!) }

            guard let data = data else {
                return .failure(AFError.responseSerializationFailed(reason: .inputDataNil))
            }

            return Result { try newJSONDecoder().decode(T.self, from: data) }
        }
    }

    @discardableResult
    fileprivate func responseDecodable<T: Decodable>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self {
        return response(queue: queue, responseSerializer: decodableResponseSerializer(), completionHandler: completionHandler)
    }

    @discardableResult
    func responseLoginResponse(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<LoginResponse>) -> Void) -> Self {
        return responseDecodable(queue: queue, completionHandler: completionHandler)
    }
}

ошибканаходится в этой строке кода fileprivate func decodableResponseSerializer<T: Decodable>() -> DataResponseSerializer<T>:

fileprivate func decodableResponseSerializer<T: Decodable>() -> DataResponseSerializer<T> {
    return DataResponseSerializer { _, response, data, error in
        guard error == nil else { return .failure(error!) }

        guard let data = data else {
            return .failure(AFError.responseSerializationFailed(reason: .inputDataNil))
        }

        return Result { try newJSONDecoder().decode(T.self, from: data) }
    }
}

и это говорит

Невозможно специализировать неуниверсальный тип 'DataResponseSerializer'

...