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)
}
그리고 저의 코드는
- 통신에 실패한 경우 invalidHTTPStatusCode
2. 네트워크가 단절된 경우 URLSessionError
이정도로 확인할 수 있네요
그래서 최종적으로 HTTPURLResponse.statusCode 를 통해
상태코드를 얻을 수 있었습니다
if case 구문을 이번에 처음 써봤는데, 저 처럼 처음써보시는 분들을 위해
참고하면서 대충 실험용으로 만든 코드를 올려놓겠습니다,,
열거형을 이용한 if case, guard case
사진에 나와있는 대로,
If - case, guard case 구문을 사용할 수 있다.
추가로, 연관값도 가져와서 사용할 수 있음!
'iOS' 카테고리의 다른 글
복잡한 ViewController 에서의 VIewDidLoad or init 순서 (0) | 2024.05.01 |
---|---|
서버에서 주는 에러메세지도 디코딩으로 받아보기 (0) | 2024.04.24 |
Custom Modal · Alert (1) | 2024.03.26 |
Background Timer (0) | 2024.03.26 |
UITableViewCell의 prepareForReuse() : 재사용 셀 초기화하기 (0) | 2024.02.18 |