티스토리 뷰

Tech/Swift

스위프트5.0 Result타입

Ellie Kim 2020. 4. 1. 11:40

Result타입은 스위프트 5.0에서 발표한 내용입니다.

특히 비동기 API에서의 결과 처리에 대한 복잡함을 간단하고 명확하게 만들어주고

쉽게 에러를 핸들링할 수 있도록 해줘요.

 

Result는 enum으로 선언되어 있으며,

success와 failure로 두개의 케이스가 존재합니다.

(벌써 명확함이 느껴지기 시작)

Result타입은 성공인지 실패인지 나타내는 값입니다.

첫 번째 줄 우측을 보시면 where으로 조건이 선언되어 있습니다.

Failure은 스위프트의 Error타입을 준수해야 합니다.

 

아래는 URLSession에 사용된 예시입니다.

네트워킹을 통해 데이터를 받거나 에러를 받을 수 있습니다.

let task = URLSession.shared.dataTask(with: url) {
    data, response, error in
    
    if let error = error {
        // Handle error
        ...
    } else if let data = data {
        // Handle successful response data
        ...
    }
}

 

옵셔널 data와 error를 언래핑하고 클로저에 전달합니다.

예를 들어 에러가 발생했을 때는 (nil, error)

에러가 발생하지 않을 때는 (data, nil) 이렇게 전달합니다.

또 네트워크 호출을 할 때마다 각 값을 언래핑해줘야 합니다.

 

Result를 사용하면 문제를 해결할 수 있습니다.

Result <Data, Error>를 사용해줍니다.

이전엔 nil을 보내던 방식이면 Result를 통해 nil대신 무엇이 잘못된 지 말해줄 수 있습니다.

let task = URLSession.shared.dataTask(with: url) { result in
    switch result {
    case .success(let data):
        // Handle successful response data
        ...
    case .failure(let error):
        // Handle error
        ...
    }
}

또한 switch구문을 함께 사용해 더욱 직관적으로 성공인지 실패인지 확인 가능합니다.

 

https://www.hackingwithswift.com/articles/161/how-to-use-result-in-swift

https://developer.apple.com/documentation/swift/result

'Tech > Swift' 카테고리의 다른 글

스위프트 클래스  (0) 2020.05.30
스위프트 인터뷰  (0) 2020.05.30
스위프트 lazy 프로퍼티  (0) 2020.03.31
스위프트 typealias에 대해서  (0) 2020.03.31
Swift 5.2 Key Path Exressions as Functions  (0) 2020.03.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함