상세 컨텐츠

본문 제목

Combine. Ch 3. Transforming Operators

TIL/Combine

by box-jeon 2020. 8. 17. 22:32

본문

Transforming operators에 대해 배워봅니다. Operator들은 기본적으로 publisher를 리턴하며, transforming operator가 리턴하는 publisher들은 upstream value들을 받아 변형한 후 방출합니다. RxSwift에서 비슷한 내용을 정리할 때는 계속 막연하게 '받아서 전달합니다'란 식으로 적었었는데, upstream/downstream으로 정리를 하니 훨씬 명확한 느낌입니다.

 

Collecting values

collect()

Upstream이 종료되는 시점에 지금까지 들어온 value들을 array로 만들어 방출합니다.

collect(_:)

Upstream에서 받은 value가 특정 갯수에 이르면 array로 downstream에 방출합니다. 예를 들어 count가 2인 경우, upstream으로부터 5개의 value를 받게되면 크기가 2인 array를 2개 방출합니다. 5번째 value 후에 upstream이 종료되면 크기가 1인 array를 마저 방출합니다.

 

Mapping values

map(_:)

Swift Standard Library의 map과 동일하게 동작합니다. Upstream에서 받은 value를 closure의 파라미터로 전달한 후, 그 리턴값을 방출합니다.

map<T>(_:), map<T0, T1>(_:_:), map<T0, T1, T2>(_:_:_:)

map 호출 시 파라미터로 지정한 key path에 따라 upstream에서 받은 value의 프로퍼티를 downstream에 방출합니다.

tryMap(_:)

동작은 map과 동일하지만 closure가 error를 throw할 수 있습니다. Closure 내에서 error가 발생할 경우, downstream에 error를 방출합니다.

 

Flattening publishers

flatMap(maxPublishers:_:)

복수의 upstream publisher를 하나의 downstream publisher로 변형해주는 operator입니다. Upstream이 value로 publisher를 방출하는 상황이 일반적이며, maxPublishers를 통해 flatten할 publisher의 최대 갯수를 제한할 수 있습니다.

 

Replacing upstream output

replaceNil(with:)

Upstream이 nil value를 방출할 경우, 이를  사전에 지정해둔 value로 치환해서 방출합니다. 다만 non-optional value로 만들어주는 것은 아니고 optional이지만 값을 보장하는 것으로, downstream의 Output 타입은 여전히 optional이 됩니다.

replaceEmpty(with:)

Upstream이 value를 방출하지 않은 채 종료될 경우, 사전에 지정해둔 value를 방출합니다. 해당 value를 방출한 후, downstream도 곧장 종료됩니다.

 

Incrementally transforming output

scan(_:_:)

Closure의 첫 번째 파라미터는 downstream의 마지막 value이고, 두 번째 파라미터는 upstream의 현재 value입니다. Downstream의 직전 상태에 따라 value를 방출하고 싶은 경우 선택할 수 있는 옵션입니다. 예제에서는 주가 변동 표시하는 방식으로 구현하였는데, upstream에서 방출하는 value는 주가 상승/하락 금액입니다.

Playground에서 우측 끝의 파란 버튼(Show Result)을 눌러보니 그래프를 보여줍니다. 멋지긴 한데... 왜 그래프일까 궁금해던 찰나에, 그래프에 우클릭을 해보니 Latest Value / Value History / Graph 선택지가 있었습니다. Value History를 선택하면 숫자가 주르륵 나열됩니다.

 

store.raywenderlich.com/products/combine-asynchronous-programming-with-swift

 

Combine: Asynchronous Programming with Swift

The best book for learning how to manage declarative asynchronous event handling with the Swift Combine framework!

store.raywenderlich.com

 

'TIL > Combine' 카테고리의 다른 글

Combine. Ch 4. Filtering Operators  (0) 2020.08.23
Combine. Ch 2. Publishers & Subscribers  (0) 2020.05.06
Combine. Ch 1. Hello, Combine!  (0) 2020.04.26

관련글 더보기

댓글 영역