티스토리 뷰

반응형

 

 

오늘은 iOS Combine framework operator 연산자 중, 여러 Publisher이벤트를 시간순으로 합져서 받기 위해 사용할 수 있는 merge(with:)에 대해서 예제와 함께 다뤄보겠습니다. 😁

 


iOS Combine, Publisher들의 이벤트를 merge 할때 사용하는 merge(with:)
공식 문서의 예시 참고하여 알아보기

merge(with:) 연산자는 인자로 Publisher를 받습니다. 그렇게 A, B Publisher가 있다고 할때, A.merge(with: B) 와 같이 될 수 있는 것인데요. 이렇게 되면, 하나의 stream을 통해 A, B가 방출하는 이벤트를 시간순으로 함께 받을 수 있게 됩니다.

그 아래 merge(with) 과 관련된 공식 문서에 나온 예시를 보도록 하겠습니다. 
PassthroughSubject<Int, Never>() 타입의 publisher, pub2 를 선언했습니다. 이후에 merge(with:) 을 사용하고 있죠. 여기에서 publisher, pub2 두개 publisher의 이벤트를 down stream에서 함께 받을 수 있습니다. 

그렇기에, publisher, pub2 subject(publisher)들이 send를 통해 방출되는 이벤트가 cancellable에서 저장한 구독을 통해 수신되는 것을 볼 수 있습니다.

위의 경우에는 subject와 subject를 merge한 예시인데요. subject가 아닌 일반 publisher를 merge할 수도 있습니다. 아래 예시로 한번더 보겠습니다.

 


iOS Combine, merge(with:) operator의 또다른 사용 예시, 방법 알아보기

merge(with:) 사용하기 전에 그 안에 사용되는 메서드 하나를 보겠습니다. Int 인자를 받아서 String 이벤트를 방출하는 AnyPublisher를 반환하는 메서드입니다. Just Publisher는 단 하나의 원소를 down stream으로 전달하며 Error를 던지지 않습니다.

결과적으로, stream이 내려가면서 Just<Int> -> Just<String> -> AnyPublisher<String, Never> 타입 Publisher로 변환하여 반환됩니다.

 

 

merge(with:)이 사용되는 예제 메서드입니다. 1...100 까지의 100개 원소를 가진 배열에서 (1...50)의 원소만 추려낸 후, [Int] 타입 배열의 각 원소를 String 타입으로 변환 하여 Publisher 이벤트로 방출합니다.

이때 merge(with:) 연산자를 사용해서 1부터 50까지 차례대로 이벤트를 합친 후, down stream에 내려주는 AnyPublisher<String, Never> 타입 Publisher를 반환하게 됩니다.

* 다수의 원소를 갖는 배열의 경우에는 보통 reduce의 결과로 배열타입을 반환하며, [String], [Int] 타입을 반환하곤 합니다. 
 하지만 위 예시처럼 Combine Publisher를 merge한 결과에 대하여 반환타입을 AnyPublisher<String, Never>로 받고 있는데, 이때는 Output 타입이 [String]이 아닌 String이 됩니다. 내부 연산과정을 숨기는 AnyPublisher를 반환하면 내부 연산과정에 따라 다수의 이벤트를 방출할 수 있습니다.

해당 메서드를 구독할 경우, "1", "2", .... "50" 의 String 타입 Output을 받게 될 것입니다.

 

 

앞서 보았던 메서드를 구독한 결과입니다. 예상대로 "1", "2", .... "50" 의 String 타입 Output을 받게 됩니다.

 

 


iOS Combine framework에서 사용하는 merge operator는 다수의 Publisher의 이벤트를 하나의 stream으로 받고자 할때, 그렇게 여러 Publisher로부터 받는 이벤트를 시간순으로 받고자 할때 유용하게 사용될 수 있는 연산자입니다. 

기타 의견이나 피드백 언제든 댓글로 부탁드립니다. 아래 위 예제 코드가 있는 참고링크 공유드립니다. 감사합니다!

 

GitHub - iOS-Udemy-Study-Group/Hello-Combine-with-Udemy: Combine framework study with Udemy lecture

Combine framework study with Udemy lecture. Contribute to iOS-Udemy-Study-Group/Hello-Combine-with-Udemy development by creating an account on GitHub.

github.com

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함