使用swift从xcode中的QuickType生成模型时出错

使用swift从xcode中的QuickType生成模型时出错,swift,xcode,alamofire,quicktype,Swift,Xcode,Alamofire,Quicktype,我正在使用Alamofire4.0,我从一个非常有用的工具QuickType生成我的模型,但是我得到了这个错误。在Alamofire的扩展中,我不明白会发生什么,因为所有这些类都返回QuickType控制台 这是我从quicktype和Alamofire扩展中得到的模型 import Foundation import Alamofire class LoginResponse: Codable { let user: JSONNull? let status: Int

我正在使用Alamofire4.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)
    }
}
<代码>导入基础 进口阿拉莫菲尔 类登录响应:可编码{ 让用户:JSONNull? let状态:Int 让成功:布尔 让消息:字符串 init(用户:JSONNull?,状态:Int,成功:Bool,消息:String){ self.user=用户 self.status=状态 自我成功=成功 self.message=消息 } } //标记:编码/解码帮助程序 类JSONNull:Codable,Hashable{ publicstaticfunc==(lhs:JSONNull,rhs:JSONNull)->Bool{ 返回真值 } 公共值:Int{ 返回0 } 公共init(){} 公共必需的init(来自解码器:解码器)抛出{ let container=尝试解码器。singleValueContainer() if!container.decodeNil(){ 抛出DecodingError.typeMismatch(JSONNull.self,DecodingError.Context(codingPath:decoder.codingPath,debugDescription:“JSONNull的类型错误”)) } } 公共函数编码(到编码器:编码器)抛出{ var container=encoder.singleValueContainer() 尝试container.encodeNil() } } fileprivate func newJSONDecoder()->JSONDecoder{ let decoder=JSONDecoder() 如果可用(iOS 10.0、OSX 10.12、tvOS 10.0、watchOS 3.0、*){ decoder.dateDecodingStrategy=.iso8601 } 返回解码器 } fileprivate func newJSONEncoder()->JSONEncoder{ let encoder=JSONEncoder() 如果可用(iOS 10.0、OSX 10.12、tvOS 10.0、watchOS 3.0、*){ 编码器.dateEncodingStrategy=.iso8601 } 返回编码器 } //MARK:-Alamofire响应处理程序 扩展数据请求{ fileprivate func decodableResponseSerializer()->DataResponseSerializer{ 返回DataResponseSerializer{},响应,数据,中的错误 guard error==nil else{return.failure(error!)} guard let data=其他数据{ return.failure(AFError.responseSerialization失败(原因:.inputDataNil)) } 返回结果{try newJSONDecoder().decode(T.self,from:data)} } } @可丢弃结果 fileprivate func responseDecodable(队列:DispatchQueue?=nil,completionHandler:@escaping(DataResponse)->Void)->Self{ 返回响应(队列:队列,响应序列化程序:decodableResponseSerializer(),completionHandler:completionHandler) } @可丢弃结果 func responseLoginResponse(队列:DispatchQueue?=nil,completionHandler:@escaping(DataResponse)->Void)->Self{ return responseDecodable(队列:queue,completionHandler:completionHandler) } } 错误在这行代码中
fileprivate func decodableResponseSerializer()->DataResponseSerializer

fileprivate func decodableResponseSerializer()->DataResponseSerializer{
返回DataResponseSerializer{},响应,数据,中的错误
guard error==nil else{return.failure(error!)}
guard let data=其他数据{
return.failure(AFError.responseSerialization失败(原因:.inputDataNil))
}
返回结果{try newJSONDecoder().decode(T.self,from:data)}
}
}
这上面说

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


您使用的是Swift 5吗?我使用的是xcode 10.1和Swift 4.2@DávidPásztort问题是QuickType生成的代码使用Swift 5的
结果
类型。不管怎么说,4.0已经发布三年了,你为什么要使用这么旧的Alamofire版本呢?我已经有了最新版本的xcode 10.2和swift 5,但现在我在相同方法的代码的另一部分中发现了一个错误@DávidPászor,在DataResponseSerializer中,我刚刚更新了我的问题。你有没有发现这个问题?
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) }
    }
}