【问题标题】:the difference between responseJSON and responseData of AlamofireAlamofire的responseJSON和responseData的区别
【发布时间】:2017-01-09 10:57:10
【问题描述】:

我只是在玩 Alamofire 框架并进行一些 api 调用。但是我观察到 alamofire 中有两种请求方法

Alamofire的responseJSON和responseData有什么区别。

public func responseData(
    queue: DispatchQueue? = nil,
    completionHandler: @escaping (DataResponse<Data>) -> Void)
    -> Self
{
    return response(
        queue: queue,
        responseSerializer: DataRequest.dataResponseSerializer(),
        completionHandler: completionHandler
    )
}




public func responseJSON(
    queue: DispatchQueue? = nil,
    options: JSONSerialization.ReadingOptions = .allowFragments,
    completionHandler: @escaping (DataResponse<Any>) -> Void)
    -> Self
{
    return response(
        queue: queue,
        responseSerializer: DataRequest.jsonResponseSerializer(options: options),
        completionHandler: completionHandler
    )
}

【问题讨论】:

    标签: alamofire


    【解决方案1】:

    responseJSON 会将一个 JSON 对象传递给它的完成。即,它将是具有 String 键和 JSON 兼容值的字典或数组。

    responseData 将传递一个Data 对象到它的完成中。这可能包含可以反序列化为 JSON 对象的 JSON 数据,但它也可能包含任何其他类型的数据。图片数据、HTML、视频数据等……

    如果您知道您正在从端点获取 JSON,请使用 responseJSON 调用。

    【讨论】:

    • 我不确定您是否使用了名为 SwiftJSON 的库。只想问如果我使用这样的库,我是否可以一直使用responseData?因为我的 API 集合中有某个端点返回一个错误,指出无法解析 JSON 或其他内容(使用 responseJSON)。
    • @prettyitgirl.com 如果数据不是有效的 json,那么您将收到该错误。仅当响应中是 json 时才使用 responseJSON。如果不是,您可以使用 responseData,它只会将原始数据传递给您(例如,它可以是文件或其他类型的数据)。
    • 谢谢!这个特定的端点工作正常,结果是 JSON,在 Postman 中,但不是在我的项目中。真的很奇怪,错误是 404,因为内容是 html 或其他东西。弄清楚它发生的原因花了我很多时间,所以我只使用 responseData 并结合SwiftyJson 库。
    • 如果我可以同时使用哪一个对性能有好处?有实时体验吗??
    • @iOS.Wolf5219866 不用担心性能问题。担心你想对响应做什么。如果您想要Data 的内容,请使用responseData。如果您想要 JSON 对象,请使用 responseJSON
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多