ios - Alamofire 使用未声明的类型 'Serializer'

标签 ios swift alamofire serialization

我已经更新到 XCode 7 beta 6 和 Alamofire需要更新到 beta 3。这样做时,我必须更新使用 Alamofire 的代码区域.我特别难以更新的一个领域是用于从指定 URL 检索图像并将其加载到 UIImageView 中的代码。 .

以前,Alamofire 的扩展名处理的是:

extension Alamofire.Request {
    class func imageResponseSerializer() -> Serializer {
        return { request, response, data in
            if data == nil {
                return (nil, nil)
            }

            let image = UIImage(data: data!, scale: UIScreen.mainScreen().scale)

            return (image, nil)
        }
    }

    func responseImage(completionHandler: (NSURLRequest, NSHTTPURLResponse?, UIImage?, NSError?) -> Void) -> Self {
        return response(serializer: Request.imageResponseSerializer(), completionHandler: { (request, response, image, error) in
            completionHandler(request!, response, image as? UIImage, error)
        })
    }
}

但这不是抛出错误

Use of undeclared type 'Serializer'

我确实意识到 Alamofire不使用 Serializer不再是了,但是有谁知道我在哪里可以找到一些文档或示例在检索图像时现在该做什么?

最佳答案

如您在自述文件中所见,序列化已被重写。

你应该可以使用下面的方法:

public protocol ResponseObjectSerializable {
    init?(response: NSHTTPURLResponse, representation: AnyObject)
}

extension Request {
    public func responseObject<T: ResponseObjectSerializable>(completionHandler: Response<T, NSError> -> Void) -> Self {
        let responseSerializer = ResponseSerializer<T, NSError> { request, response, data, error in
            guard error == nil else { return .Failure(error!) }

            let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
            let result = JSONResponseSerializer.serializeResponse(request, response, data, error)

            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(error)
                }
            case .Failure(let error):
                return .Failure(error)
            }
        }

        return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
    }
}

关于ios - Alamofire 使用未声明的类型 'Serializer',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32341665/

相关文章:

swift - 如何将 Alamofire 与自定义 header 一起用于 POST 请求

ios - 保存核心数据数组和字典

objective-c - iOS - UITableViewCell 图像在选择时位于表格顶部?

ios - 如何链接到我们应用程序的更新页面

ios - 警报不会按预期弹出

ios - Alamofire 超时不起作用

ios - FCM-如何区分它是在用户单击通知时从 Firebase 控制台发送还是从 HTTP 发送

ios - 如何在 SwiftUI 中设置与 superview 成比例的高度和宽度?

swift - Alamofire 返回错误

ios - 如何在使用 Realm 的同时实现 Codable