Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 自定义序列化发现不正确的“;回应";在Alamofire 4.0中_Swift_Alamofire_Swift3 - Fatal编程技术网

Swift 自定义序列化发现不正确的“;回应";在Alamofire 4.0中

Swift 自定义序列化发现不正确的“;回应";在Alamofire 4.0中,swift,alamofire,swift3,Swift,Alamofire,Swift3,我正在尝试为Alamofire 4.0定义自定义模型序列化。到目前为止,我遵循的是responseJson和朋友们使用的模型。具体而言,到目前为止,我得到的是: extension Alamofire.Request { public static func serializeResponseModel<T:ModelObject>(response:HTTPURLResponse?, data:Data?, error:Error?) -> Alamofire.Res

我正在尝试为Alamofire 4.0定义自定义模型序列化。到目前为止,我遵循的是
responseJson
和朋友们使用的模型。具体而言,到目前为止,我得到的是:

extension Alamofire.Request {
    public static func serializeResponseModel<T:ModelObject>(response:HTTPURLResponse?, data:Data?, error:Error?) -> Alamofire.Result<T> {
        switch serializeResponseJSON(options: [], response: response, data: data, error: error) {
        case .success(let jsonObject):
            do {
                return .success(try T(json:jsonObject as! JSONObject))
            }
            catch {
                return .failure(error)
            }
        case .failure(let error):
            return .failure(error)
        }
    }
}

extension Alamofire.DataRequest {
    public static func serializeResponseModel<T:ModelObject>() -> DataResponseSerializer<T> {
        return DataResponseSerializer { _, response, data, error in
            return Request.serializeResponseConcierge(response: response, data: data, error: error)
        }
    }

    @discardableResult
    public func responseModel<T:ModelObject>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self
    {
        return response(
            queue: queue,
            responseSerializer: DataRequest.serializeResponseModel(),
            completionHandler: completionHandler
        )
    }
}

我在这里遗漏了什么,允许它在
responseJson
案例中工作,但在我的案例中却不工作?

显然,问题是由于过度泛化,以及编译器无法为
DataRequest.serializeResponseModel()生成适当的类型
当我将
responseModel
更改为以下内容并指定了适当的类型时,一切正常:

@discardableResult
public func responseModel<T:ModelObject>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self
{
    return response(
        queue: queue,
        responseSerializer: DataRequest.modelResponseSerializer() as DataResponseSerializer<T>,
        completionHandler: completionHandler
    )
}
@discardableResult
public func responseModel(队列:DispatchQueue?=nil,completionHandler:@escaping(DataResponse)->Void)->Self
{
返回响应(
队列:队列,
responseSerializer:DataRequest.modelResponseSerializer()作为DataResponseSerializer,
completionHandler:completionHandler
)
}

显然,问题源于过度泛化,并且编译器无法为
DataRequest.serializeResponseModel()生成适当的类型。
当我将
responseModel
更改为以下内容并指定适当的类型时,一切正常:

@discardableResult
public func responseModel<T:ModelObject>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self
{
    return response(
        queue: queue,
        responseSerializer: DataRequest.modelResponseSerializer() as DataResponseSerializer<T>,
        completionHandler: completionHandler
    )
}
@discardableResult
public func responseModel(队列:DispatchQueue?=nil,completionHandler:@escaping(DataResponse)->Void)->Self
{
返回响应(
队列:队列,
responseSerializer:DataRequest.modelResponseSerializer()作为DataResponseSerializer,
completionHandler:completionHandler
)
}