ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Result
    Swift 2021. 4. 28. 20:36

    안녕하세요. 그린입니다🟢

    이번 포스팅에서는 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가 옵셔널과 비슷하지만 옵셔널보다 더 간단하게 다양한 에러 핸들링을 해줄 수 있는 타입으로 만들어진것 같다고 생각이 들었다.

     

    [참고자료]

    스위프트 프로그래밍 (야곰 지음)

    jusung.github.io/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
Designed by Tistory.