gpt4 book ai didi

swift - 自定义序列化在 Alamofire 4.0 中发现不正确的 "response"

转载 作者:行者123 更新时间:2023-11-28 08:26:56 26 4
gpt4 key购买 nike

我正在尝试为 Alamofire 4.0 定义自定义模型序列化。到目前为止,我一直在关注 responseJson 和 friend 们使用的模型。具体来说,到目前为止我所拥有的是:

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
)
}
}

不幸的是,该框架的实现有些糟糕,return response( 行正在查找 response 属性(在 Request 中定义)而不是适当的 response 方法(在 DataRequest 中定义),这会导致编译错误:

Cannot call value of non-function type 'HTTPURLResponse?'

我在这里缺少什么允许它在 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
)
}

关于swift - 自定义序列化在 Alamofire 4.0 中发现不正确的 "response",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com