본문 바로가기

iOS

Kingfisher - Error Handling

kingfisher 의 실패 케이스를 가져와봅시다

kingfisherError 는 열거형으로 이루어져 있고,

case 에 responseError 라는 응답에러 및 이유가 담겨져 있는 곳이 있다.

음 저는 서버에서 보내주는 statusCode 를 사용하려고 하는데

여기서 사용하는 코드는 필요없으니 invalidHTTPStatusCode 쪽으로 더 깊게 들어가봅시다.

여기서 HTTPURLResponse 라는 녀석을 찾을 수 있네요

HTTPURLResponse 는 애플이 만든 클래스입니다.

드디어 찾았습니다,,

여기서 상태코드를 가져오면 되겠네요

자 이제 가져와봅시다

실제로 사용할때는 이렇게까지 작성해놔야 . 찍었을때 케이스들을 가져올 수 있네요

responseError 를 찾아주시고

케이스에는 reason 이라는 열거형의 연관값이 들어가기에 사용해줍시다.

그래도 이들이 뭔지 살펴보니 이렇게 쓰여 있었어요,,

public enum ResponseErrorReason {

    /// 응답이 유효한 URL 응답이 아닙니다. 코드 2001.
    /// - response: 받은 유효하지 않은 URL 응답.
    ///             응답은 HTTP 응답이어야 하지만, 그렇지 않습니다.
    case invalidURLResponse(response: URLResponse)

    /// 응답에 유효하지 않은 HTTP 상태 코드가 포함되어 있습니다. 코드 2002.
    /// - 주의:
    ///   기본적으로, 상태 코드 200..<400은 유효한 것으로 인식됩니다. 이 동작은 `ImageDownloaderDelegate`를 준수함으로써 오버라이드할 수 있습니다.
    /// - response: 받은 응답.
    case invalidHTTPStatusCode(response: HTTPURLResponse)

    /// 시스템 URL 세션에서 오류가 발생했습니다. 코드 2003.
    /// - error: 기본 URLSession 오류 객체.
    case URLSessionError(error: Error)

    /// 유효한 데이터를 반환하는 데 데이터 수정이 실패했습니다. 코드 2004.
    /// - task: 실패한 작업.
    case dataModifyingFailed(task: SessionDataTask)

    /// 작업이 완료되었으나 URL 응답을 찾을 수 없습니다. 코드 2005.
    /// - task: 실패한 작업.
    case noURLResponse(task: SessionDataTask)

    /// `ImageDownloaderDelegate`에 의해 작업이 취소되었습니다. 이는 대리자 메소드에 의해 지정된 `.cancel` 응답 처분 때문입니다. 코드 2006.
    case cancelledByDelegate(response: URLResponse)
}

그리고 저의 코드는

  1. 통신에 실패한 경우 invalidHTTPStatusCode

 

2. 네트워크가 단절된 경우 URLSessionError

이정도로 확인할 수 있네요

그래서 최종적으로 HTTPURLResponse.statusCode 를 통해

상태코드를 얻을 수 있었습니다

 

 

if case 구문을 이번에 처음 써봤는데, 저 처럼 처음써보시는 분들을 위해 
참고하면서 대충 실험용으로 만든 코드를 올려놓겠습니다,,

열거형을 이용한 if case, guard case

사진에 나와있는 대로,

If - case, guard case 구문을 사용할 수 있다.

추가로, 연관값도 가져와서 사용할 수 있음!