Ios Alamofire,错误消息使用未声明的类型';通用应答器';
我遵循ray wanderlich的alamofire/swift Turiorial,使用swift 2.0和alamofire 3.0 beta3。现在,我已经处理了一些小问题,但这一个我坚持Ios Alamofire,错误消息使用未声明的类型';通用应答器';,ios,swift,alamofire,Ios,Swift,Alamofire,我遵循ray wanderlich的alamofire/swift Turiorial,使用swift 2.0和alamofire 3.0 beta3。现在,我已经处理了一些小问题,但这一个我坚持 message: Use of undeclared type 'GenericResponseSerializer' Generic type 'Result' specialized with too few type parameters (got 1, but expected 2)
message: Use of undeclared type 'GenericResponseSerializer'
Generic type 'Result' specialized with too few type parameters (got 1, but expected 2)
这是我代码的一部分
extension Alamofire.Request {
/** Response serializer for images from: http://www.raywenderlich.com/85080/beginning-alamofire-tutorial */
class func imageResponseSerializer() -> GenericResponseSerializer<UIImage> {
return GenericResponseSerializer { request, response, data in
guard let validData = data else {
let failureReason = "Data could not be serialized. Input data was nil."
let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
return .Failure(data, error)
}
if let image = UIImage(data: validData, scale: UIScreen.mainScreen().scale) {
return Result<UIImage>.Success(image)
}
else {
return .Failure(data, Error.errorWithCode(.DataSerializationFailed, failureReason: "Unable to create image."))
}
}
}
/** Convenience method for returning images from: http://www.raywenderlich.com/85080/beginning-alamofire-tutorial */
func responseImage(completionHandler: (NSURLRequest?, NSHTTPURLResponse?, Result<UIImage>) -> Void) -> Self {
return response(responseSerializer: Request.imageResponseSerializer(), completionHandler: completionHandler)
}
}
扩展Alamofire.Request{
/**来自以下位置的图像的响应序列化程序:http://www.raywenderlich.com/85080/beginning-alamofire-tutorial */
类func imageResponseSerializer()->GenericResponseSerializer{
返回GenericResponseSerializer{request,response,data in
guard let validData=数据其他{
let failureReason=“无法序列化数据。输入数据为零。”
let error=error.errorWithCode(.DataSerializationFailed,failureReason:failureReason)
return.Failure(数据、错误)
}
如果让image=UIImage(数据:validData,比例:UIScreen.mainScreen().scale){
返回结果。成功(图片)
}
否则{
return.Failure(数据,Error.errorWithCode(.DataSerializationFailed,failureReason:“无法创建映像”))
}
}
}
/**从以下位置返回图像的简便方法:http://www.raywenderlich.com/85080/beginning-alamofire-tutorial */
func responseImage(completionHandler:(NSURLRequest?,NSHTTPURLResponse?,Result)->Void)->Self{
返回响应(responseSerializer:Request.imageResponseSerializer(),completionHandler:completionHandler)
}
}
ps:我在哪里/如何下载Alamofire 2.0???您尝试过使用吗?看起来是个不错的扩展。
,但您应该测试安装via,这是一个非常简单和干净的工具。该示例不适用于Alamofire 3.0。
GenericResponseSerializer
逻辑已被严重重构。请查看我们最新的自述和3.0迁移指南
编辑
此外,您还应该查看其中包含响应图像序列化的所有逻辑以及许多其他很酷的功能。它也是由AlamofireSF构建的,并将得到很好的支持。我不完全理解GenericResponseSerializer的逻辑。因此,我为我的应用程序所做的(因为我确实需要这个功能)就是完全注释掉你在帖子中写的代码(我遵循了与你相同的Ray Wenderlich教程),然后在我的PhotoBrowserCollectionViewController中,我在cellForItemAtIndexPath函数中做了一些更改。现在看起来是这样的:
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(PhotoBrowserCellIdentifier, forIndexPath: indexPath) as! PhotoBrowserCollectionViewCell
let imageURL = (photos.objectAtIndex(indexPath.row) as! PictureElement).imageURL
cell.request?.cancel()
// Using image cache system to make sure the table view works even when rapidly scrolling down the screen.
if let image = self.imageCache.objectForKey(imageURL) as? UIImage {
cell.imageView.image = image
} else {
cell.imageView.image = nil
cell.request = Alamofire.request(.GET, imageURL).responseImage { response in
debugPrint(response)
print(response.request)
print(response.response)
debugPrint(response.result)
if let image = response.result.value {
self.imageCache.setObject(response.result.value!, forKey: response.request!.URLString)
cell.imageView.image = image
} else {
}
}
}
return cell
仍然没有让它完全工作(因为我的API部分根本不工作),所以这可能是完全错误的,但至少它可以构建。我使用AlamofireImage来实现这一点,只是使用他们在GitHub页面上的基本解释,由第一个回复这篇文章的人链接。至少使用它,看看它能把你带到哪里。AlamofireObjectMapper只需要alamofire 2.0吗?从我所能看出,它看起来是这样的。AlamofireObjectMapper不是AlamofireSF支持的库,所以我不是100%确定。使用
ResponseSerializer
可以使用它。现在不需要使用ObjectMapper。向上投票!