无法专门化非泛型类型 ResponseSerializer
Posted
技术标签:
【中文标题】无法专门化非泛型类型 ResponseSerializer【英文标题】:Cannot specialize non-generic type ResponseSerializer 【发布时间】:2015-09-28 11:07:47 【问题描述】:从documentation 和2.0 Migrate Guide 我尝试使用Response Serialization
,但出现以下错误。我似乎无法弄清楚这些问题。 ResponseCollectionSerializable
也有同样的错误。
【问题讨论】:
【参考方案1】:你应该使用符合ResponseSerializer
的GenericResponseSerializer
:
public protocol ResponseObjectSerializable
init?(response: NSHTTPURLResponse, representation: AnyObject)
extension Request
public func responseObject<T: ResponseObjectSerializable>(completionHandler: (NSURLRequest?, NSHTTPURLResponse?, Result<T>) -> Void) -> Self
let responseSerializer = GenericResponseSerializer<T> request, response, data in
let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONResponseSerializer.serializeResponse(request, response, data)
switch result
case .Success(let value):
if let
response = response,
responseObject = T(response: response, representation: value)
return .Success(responseObject)
else
let failureReason = "JSON could not be serialized into response object: \(value)"
let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason)
return .Failure(data, error)
case .Failure(let data, let error):
return .Failure(data, error)
return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
ResponseSerializer
是所有响应序列化程序必须遵守的协议。
【讨论】:
GenericResponseSerializer that conforms to ResponseSerializer
是什么意思?
我找到了。 github.com/Alamofire/Alamofire/tree/… 您可以编辑包含此代码的答案。这是因为我使用的是 3.0 代码而不是 2.0.2
我添加了代码来回答。我的意思是Request.response
方法接受ResponseSerializer
作为第一个参数,GenericResponseSerializer
是符合(实现)ResponseSerializer
协议的 Alamofire 构建通用类,可用于提供自动的、类型安全的响应对象序列化。 以上是关于无法专门化非泛型类型 ResponseSerializer的主要内容,如果未能解决你的问题,请参考以下文章
为啥 C# 无法从非泛型静态方法的签名推断泛型类型参数类型?