본문 바로가기
Swift

Swift Combine에서 Error 핸들링 예제

by mr.conan 2023. 6. 19.
728x90
반응형
  1. Error 핸들링 방법 Swift Combine에서 Error를 핸들링하기 위해 다음과 같은 방법을 사용할 수 있습니다.
    1. tryMap: tryMap 연산자는 클로저 내에서 발생하는 Error를 핸들링할 수 있습니다. 클로저 내에서 Error가 발생하면 이를 처리하거나 다른 값으로 변환할 수 있습니다.
    2. replaceError: replaceError 연산자는 Error를 다른 값으로 대체합니다. Error가 발생하면 지정된 대체값으로 대체되어 이후에는 정상적인 값을 방출합니다.
    3. catch: catch 연산자는 Error를 캐치하여 다른 Publisher로 대체할 수 있습니다. Error가 발생하면 catch 블록 내에서 대체 Publisher를 반환하여 이후에는 대체 Publisher의 값을 방출합니다.
  2. Error 핸들링 예제 코드 다음은 Swift Combine에서 Error를 핸들링하는 예제 코드입니다. 예제에서는 Publisher가 방출하는 값을 처리하고, Error가 발생할 경우 대체 값으로 처리합니다.
import Combine

enum DataError: Error {
    case invalidData
}

// 데이터를 가져오는 비동기 작업을 수행하는 함수
func fetchData(completion: @escaping (Result<Int, Error>) -> Void) {
    // 비동기 작업 로직
    DispatchQueue.global().async {
        // 임의로 Error를 발생시킴
        let randomValue = Int.random(in: 0...100)
        if randomValue < 50 {
            completion(.failure(DataError.invalidData))
        } else {
            completion(.success(randomValue))
        }
    }
}

// 비동기 작업을 수행하는 Publisher 생성
let publisher = Future<Int, Error> { promise in
    fetchData { result in
        promise(result)
    }
}

// Error 핸들링 및 대체 값 처리
let handledPublisher = publisher
    .tryMap { value -> Int in
        // Error 핸들링 및 변환 로직
        if value > 90 {
            throw DataError.invalidData
        }
        return value
    }
    .replaceError(with: 0)

// 값을 출력하는 Subscriber 작성
let subscriber = Subscribers.Sink<Int, Never>(receiveCompletion: { completion in
    switch completion {
    case .finished:
        print("작업 완료")
    case .failure(let error):
        print("에러 발생: \(error)")
    }
}, receiveValue: { value in
    print("받은 값: \(value)")
})

// Subscriber에게 handledPublisher 할당
handledPublisher.subscribe(subscriber)

위의 코드에서는 비동기 작업을 수행하는 fetchData 함수를 사용하여 데이터를 가져오는 비동기 작업을 모방하였습니다. 이를 기반으로 Future를 사용하여 Publisher를 생성하고, Error 핸들링 및 대체 값 처리를 위해 tryMap과 replaceError를 사용합니다. Subscriber를 통해 결과 값을 받고, Error가 발생할 경우 에러를 처리하고 대체 값을 출력합니다.

 

결론: Swift Combine을 사용하면 Error 핸들링을 효율적으로 처리할 수 있습니다. tryMap, replaceError, catch와 같은 연산자를 사용하여 Error를 적절히 핸들링하고 대체 값으로 처리할 수 있습니다. Combine 프레임워크의 Error 핸들링 기능을 적극 활용하여 안정적이고 오류 처리가 잘 되는 애플리케이션을 개발해보세요.

728x90
반응형