2017-01-09 4 views
2

방금 ​​Alamofire 프레임 워크로 놀고 있었고 몇 가지 API 호출을하고있었습니다. 그러나 alamofire에는 두 가지 요청 방법이 있습니다.Alamofire의 responseJSON과 responseData의 차이

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

답변

3

responseJSON는 완료로 JSON 객체를 전달한다. 즉 String 키와 JSON 호환 값이 포함 된 사전 또는 배열입니다.

responseDataData 개체를 완성품으로 전달합니다. 여기에는 JSON 객체로 직렬화 될 수있는 JSON 데이터가 포함될 수 있지만 다른 유형의 데이터도 포함될 수 있습니다. 이미지 데이터, HTML, 비디오 데이터 등 ...

엔드 포인트에서 JSON을 얻는 것을 알고 있다면 responseJSON 호출을 사용하십시오.

+0

감사합니다. 알 겠어! –

+0

'SwiftJSON'이라는 라이브러리를 사용하고 있는지 잘 모르겠습니다. 그런 라이브러리를 사용하고 있다면'responseData'를 항상 사용할 수 있는지 물어보고 싶습니까? JSON을 구문 분석 할 수 없다는 오류 ('responseJSON' 사용)를 리턴하는 API 콜렉션에 특정 엔드 포인트가 있기 때문입니다. – Glenn

+1

@ prettyitgirl.com 데이터가 유효한 json이 아니면 오류가 발생합니다. 응답에서 json 인 경우에만 responseJSON을 사용하십시오. 그렇지 않으면 responseData를 사용할 수 있으며 대신 원시 데이터가 전달됩니다 (예 : 파일 또는 다른 종류의 데이터 일 수 있음). – Fogmeister