2017-01-09 713 views
2

我只是在玩Alamofire框架,並且沒有多少API調用。但我觀察到alamofire有兩種請求方法:Alamofire的responseJSON和responseData之間的區別

responseJSON和responseData of Alamofire有什麼區別。

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

回答

3

responseJSON將傳遞一個JSON對象到它的完成。即它將是具有String鍵和JSON兼容值的字典或數組。

responseData將通過一個Data對象到其完成。這可能包含可以反序列化爲JSON對象的JSON數據,但它也可能包含任何其他類型的數據。圖像數據,HTML,視頻數據等...

如果您知道您從端點獲取JSON,請使用responseJSON調用。

+0

謝謝!我知道了 ! –

+0

我不確定您是否使用名爲'SwiftJSON'的庫。只是想問,如果我使用這樣一個庫,是否可以一直使用'responseData'?因爲我的API集合中有一個特定的端點返回一個錯誤,指出JSON不能被解析或者使用'responseJSON'。 – Glenn

+1

@ prettyitgirl.com如果數據是無效的JSON那麼你會得到那個錯誤。如果響應中使用json,則只使用responseJSON。如果沒有,你可以使用responseData,它只會傳遞給你原始數據(例如它可能是一個文件或其他類型的數據)。 – Fogmeister

相關問題