-
안녕하세요. 그린입니다🟢
이번 포스팅에서는 Result 타입에 대해 알아보겠습니다🧑🏻💻
Result?
- 성공 / 실패에 대한 정보를 담는 제네릭 열거형 타입
- 옵셔널과 유사하지만 값이 없지가 않음 (실패 케이스에도 오류에 대한 정보 존재)
Result 분석
@frozen public enum Result<Success, Failure> where Failure : Error { /// A success, storing a `Success` value. case success(Success) /// A failure, storing a `Failure` value. case failure(Failure) //... }
- @frozen: Objective-C에서 건너온 Enum에 새로운 케이스가 업데이트 되지 않는것을 보장되는 키워드
Result 활용
func requestURLSession<T: Decodable>(completion: @escaping (Result<T, Error>)->()) { var request = URLRequest(url: URL(string: "https://localhost:8080")!) request.method = .get URLSession(configuration: .default).dataTask(with: request) { (data, res, error) in if let error = error { completion(.failure(.error(error))) } else if let data = data { let jsonDecoder = JSONDecoder() if let decoded = try? jsonDecoder.decode(T.self, from: data) { completion(.success(decoded)) } else { completion(.failure(.basic)) } } }.resume() } }
- 주로 API 통신 시 자주 사용됨 (통신 요청에 대한 성공과 실패로 처리)
- Result 타입을 사용하면 명확한 에러 처리가 가능
[느낀점]
서버 통신을 하며 Result를 처음 접했었다. Result가 옵셔널과 비슷하지만 옵셔널보다 더 간단하게 다양한 에러 핸들링을 해줄 수 있는 타입으로 만들어진것 같다고 생각이 들었다.
[참고자료]
스위프트 프로그래밍 (야곰 지음)
'Swift' 카테고리의 다른 글
와일드카드 패턴 (3) 2021.05.18 개념 자문자답 (0) 2021.04.29 Closure 심화 (0) 2021.04.27 소켓통신 (0) 2021.04.19 Early Exit (0) 2021.04.13